DWORD WINAPI XInputGetStateStub(DWORD, XINPUT_STATE*) { return 0; } DWORD (WINAPI * XInputGetState_)(DWORD, XINPUT_STATE*) = XInputGetStateStub; #define XInputGetState XInputGetState_ #define X_INPUT_SET_STATE(name) DWORD WINAPI name(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration) typedef X_INPUT_SET_STATE(x_input_set_state); X_INPUT_SET_STATE(XInputSetStateStub) { return 0; } global_variable x_input_set_state* XInputSetState_ = XInputSetStateStub; #define XInputSetState XInputSetState_ internal_function void LoadXInput(void) { HMODULE xinputLib = LoadLibraryA("xinput1_3.dll"); if (xinputLib) { // NOTE: xinput 1.3 "should be" on more computers than 1.4. XInputGetState_ = (DWORD(WINAPI *)(DWORD, XINPUT_STATE *))GetProcAddress(xinputLib, "XInputGetState"); XInputSetState = (x_input_set_state*)GetProcAddress(xinputLib, "XInputSetState"); } }