You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:39:03