WINAPI GetRawInputData 因参数错误而报错

WINAPI GetRawInputData gives an error because of wrong parameters

GetRawInputData()returns-1(错误)和GetLastError()returns87即“参数不正确。”,第一次调用函数得到数据大小成功,但我尝试实际获取数据的第二个失败。

UINT DataSize;
if (GetRawInputData((HRAWINPUT)Message.lParam, RID_INPUT, NULL, &DataSize, sizeof(RAWINPUTHEADER)) == -1)
{
    Error("Failed getting raw input amaount\n");
}
RAWINPUT *Raw;
Raw = (PRAWINPUT)VirtualAlloc(NULL, DataSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!Raw)
{
    Error("Failed to allocate memory!\n");
}
if (GetRawInputData((HRAWINPUT)Message.lParam, RID_INPUT, Raw, &DataSize, sizeof(RAWINPUTHEADER) == -1))  // <-- Fails here
{
    Error("Failed getting raw input\n");
}

作为,您第二次调用GetRawInputData()时右括号是错误的:

if (GetRawInputData(..., sizeof(RAWINPUTHEADER) == -1))

您正在将 sizeof() 的结果与 -1 进行比较,然后将该比较的结果(0 或 1)传递给 cbSizeHeader 参数(然后检查是否 GetRawInputData() return 是一个非零 return 值),因此出现“无效参数”错误。

顺便说一句,GetRawInputDaata() 没有被记录为使用 GetLastError() 进行错误报告,所以当 GetRawInputDaata() returns 时你不能依赖那个错误代码-1.

将您的 if 语句改为这样关闭:

if (GetRawInputData(..., sizeof(RAWINPUTHEADER)) == -1)