private void Initialize() { if (Util.IsWin32()) { XInputGamePadGetState = NativeMethods.XInputGamePadGetState_x86; XInputGamePadSetState = NativeMethods.XInputGamePadSetState_x86; } else if (Util.IsWin64()) { XInputGamePadGetState = NativeMethods.XInputGamePadGetState_x64; XInputGamePadSetState = NativeMethods.XInputGamePadSetState_x64; } else { XInputGamePadGetState = NativeMethods.XInputGamePadGetState; XInputGamePadSetState = NativeMethods.XInputGamePadSetState; } }
public bool IsConnected(uint playerIndex) { if (!DllAvailable) { return(false); } try { XInputState state; uint result = XInputGamePadGetState(playerIndex, out state); return(result != ERROR_DEVICE_NOT_CONNECTED); } catch (DllNotFoundException) { if (XInputGamePadGetState != NativeMethods.XInputGamePadGetState) // if _x86 or _x64 dll not exists { XInputGamePadGetState = NativeMethods.XInputGamePadGetState; return(IsConnected(playerIndex)); } else // no dll at all { DllAvailable = false; return(false); } } catch (BadImageFormatException) // use _x86 dll on x64 system, or _x64 dll on x86 system { DllAvailable = false; return(false); } catch (Exception) { DllAvailable = false; return(false); } }