Directx 拔下控制器时XInputGetKeyStroke返回错误\u成功

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

未插入指定控制器时,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是我正在使用的版本。我正在编译/链接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