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)
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)