Directx 拔下控制器时XInputGetKeyStroke返回错误\u成功
未插入指定控制器时,XInputGetKeyStroke似乎返回错误\u SUCCESS,而未初始化提供的XINPUT\u KEYSTROKE结构:Directx 拔下控制器时XInputGetKeyStroke返回错误\u成功,directx,xinput,Directx,Xinput,未插入指定控制器时,XInputGetKeyStroke似乎返回错误\u SUCCESS,而未初始化提供的XINPUT\u KEYSTROKE结构: XINPUT_KEYSTROKE xStroke; DWORD ret = XInputGetKeyStroke(0, 0, &xStroke); if (ret == ERROR_SUCCESS) printf("ERROR_SUCCESS\n"); 我是做错了什么,还是这是XInput中的一个bug?xinput1_3.dll
XINPUT_KEYSTROKE xStroke;
DWORD ret = XInputGetKeyStroke(0, 0, &xStroke);
if (ret == ERROR_SUCCESS)
printf("ERROR_SUCCESS\n");
我是做错了什么,还是这是XInput中的一个bug?xinput1_3.dll是我正在使用的版本。我正在编译/链接DirectX 2010 SDK中的标题/库。当控制器插入XInputGetKeyStrokes时,其行为似乎与预期一致。我对xinput1_3.dll也有同样的问题,根据我的研究,它似乎没有实现。它可能在Windows 8上的xinput1_4.dll上实现,但我无法测试这一点 确认截至2014年4月26日尚未实施:
这不是最可接受的源代码,但我只能找到它。XInput 1.3(2007年4月)增加了对XInputGetKeyStroke的支持,但没有Windows驱动程序支持“聊天板”设备,因此它仅限于控制器的“按钮键” 此函数的源代码在XInput 1.3(通过旧版DirectX SDK/DirectSetup在Windows 7上提供的最新版本)和XInput 1.4(Windows 8.x上的当前版本)之间没有更改,因此如果存在错误,它可能也会在XInput 1.4上重新生成 这个特定的API只在Xbox 360上有用,Xbox 360可能支持“聊天板”,而且由于XInput的底层故事,通常使用XInput 9.1.0比使用XInput 1.3更好,并且无论如何都要坚持使用标准的
XInputGetState
方法。对于DirectX工具包GamePad类,我根本不使用XInputGetKeyStroke
,这可能是一个更有用的抽象
看到和
更新:我找到了导致这种情况的代码路径,并将提交一个bug,但XInput 1.3不太可能修复它。一种解决方法是使用另一个函数(XInputGetState
或XInputGetCapabilities
)检查连接状态,然后仅在连接状态下调用XInputGetKeyStroke