2

当未插入指定的控制器时,XInputGetKeyStroke 似乎返回 ERROR_SUCCESS,而提供的 XINPUT_KEYSTROKE 结构未初始化:

XINPUT_KEYSTROKE xStroke;
DWORD ret = XInputGetKeyStroke(0, 0, &xStroke);
if (ret == ERROR_SUCCESS)
    printf("ERROR_SUCCESS\n");

我做错了什么还是这是 XInput 中的错误?xinput1_3.dll 是我正在使用的版本。我正在编译/链接 DirectX 2010 SDK 中的头文件/库。当控制器插入时,XInputGetKeyStrokes 似乎按预期运行。

4

2 回答 2

0

XInputGetKeyStroke为 XInput 1.3(2007 年 4 月)添加了对 的支持,但没有 Windows 驱动程序支持“Chatpad”设备,因此它仅限于控制器“按钮键”。

此函数的源代码在 XInput 1.3(通过旧版 DirectX SDK / DirectSetup 在 Windows 7 上可用的最后一个版本)和 XInput 1.4(Windows 8.x 上的当前版本)之间没有变化,所以如果有错误在这里它也可能在 XInput 1.4 上重现。

这个特殊的 API 仅在可能支持“聊天板”的 Xbox 360 上真正有用,并且由于 XInput 的低级故事,通常使用 XInput 9.1.0 而不是 XInput 1.3 为您提供更好的服务,并坚持使用标准XInputGetState方法无论如何。我根本不使用XInputGetKeyStrokeDirectX Tool Kit GamePad 类,这可能是一个更有用的抽象。

请参阅XINPUT 和 Windows 8DirectX 工具包:现在使用游戏手柄

更新:我找到了导致这种情况的代码路径,并将提交一个错误,但它不太可能在 XInput 1.3 中得到修复。一种解决方法是使用另一个函数(XInputGetStateXInputGetCapabilities)来检查连接状态,然后XInputGetKeyStroke仅在连接时调用。

于 2014-10-21T18:02:30.887 回答
0

我对 xinput1_3.dll 也有同样的问题,从我的研究来看,它似乎没有实现。它可以在 Windows 8 上的 xinput1_4.dll 上实现,但我无法对此进行测试。

确认截至 2014 年 4 月 26 日尚未实施:http: //controllermax.com/forums/archive/index.php/t-142531.html

不是最可接受的来源,但这是我能找到的全部。

于 2014-10-20T11:48:18.667 回答