WinAPI GetRawInputData二次调用报参数错误87问题求助
问题根因
你代码中第二次调用GetRawInputData时存在括号位置错误的语法问题:
原本sizeof(RAWINPUTHEADER)是函数的第5个参数,你错误地将== -1的返回值判断逻辑写进了参数列表的括号内,相当于把sizeof(RAWINPUTHEADER) == -1这个布尔表达式的结果作为第5个参数传入函数。该布尔表达式结果为假时对应数值0,和API要求传入的sizeof(RAWINPUTHEADER)固定值不符,因此系统返回参数错误(错误码87)。
修正后的代码
UINT DataSize; if (GetRawInputData((HRAWINPUT)Message.lParam, RID_INPUT, NULL, &DataSize, sizeof(RAWINPUTHEADER)) == -1) { Error("Failed getting raw input amount\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) { Error("Failed getting raw input\n"); }
额外注意事项
- 调用Win32 API前可先核对参数列表顺序、括号闭合位置,避免这类语法失误导致的参数异常
- 分配的
RAWINPUT内存使用完毕后记得调用VirtualFree释放,避免内存泄漏
内容的提问来源于stack exchange,提问作者badProgrammer0123456
相关产品推荐
相关产品推荐

