xinput: allow for newer xinput DLL (#794)

Fixes #792
This commit is contained in:
bicarus
2026-07-11 03:04:49 -07:00
committed by GitHub
parent f52eaea76c
commit 0e9093a74b
+18 -2
View File
@@ -179,11 +179,27 @@ XInputSetState(
XInputManager::XInputManager() { XInputManager::XInputManager() {
log_info("xinput", "initialize..."); log_info("xinput", "initialize...");
this->xinput_lib = LoadLibraryA("xinput1_3.dll");
// many systems ship only a newer XInput runtime, so try the known
// DLL names in order of preference until one loads
static const char *xinput_dll_names[] = {
"xinput1_4.dll",
"xinput1_3.dll",
"xinput9_1_0.dll",
};
const char *loaded_name = nullptr;
for (const char *name : xinput_dll_names) {
this->xinput_lib = LoadLibraryA(name);
if (this->xinput_lib) {
loaded_name = name;
break;
}
}
if (!this->xinput_lib) { if (!this->xinput_lib) {
log_warning("xinput", "failed to load xinput1_3.dll"); log_warning("xinput", "failed to load any XInput DLL");
return; return;
} }
log_info("xinput", "loaded {}", loaded_name);
XInputGetState_addr = reinterpret_cast<decltype(XInputGetState) *>( XInputGetState_addr = reinterpret_cast<decltype(XInputGetState) *>(
GetProcAddress(this->xinput_lib, "XInputGetState")); GetProcAddress(this->xinput_lib, "XInputGetState"));
if (!XInputGetState_addr) { if (!XInputGetState_addr) {