Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么WriteFile需要延迟才能工作,或者在某些Windows计算机上出现错误\u无效\u参数?_C++_Windows_Winapi_Hid - Fatal编程技术网

C++ 为什么WriteFile需要延迟才能工作,或者在某些Windows计算机上出现错误\u无效\u参数?

C++ 为什么WriteFile需要延迟才能工作,或者在某些Windows计算机上出现错误\u无效\u参数?,c++,windows,winapi,hid,C++,Windows,Winapi,Hid,我使用CreateFile设置设备,并使用WriteFile向HID设备发送报告。在我的Dell Precision 3520 PC上我不需要通过睡眠通话向设备发送初始设置信息。但是,在其他Windows机器上调试后(列表中的Alienware),我发现如果不调用Sleep,尝试发送初始设置消息时会失败 这实际上是一个非常特殊的情况: HID设备正在建立可扩展连接 设备最初关闭,然后打开,Windows事件系统通过对WM_DEVICECHANGE的进程回调来查找设备到达,在那里CreateFi

我使用
CreateFile
设置设备,并使用
WriteFile
向HID设备发送报告。在我的Dell Precision 3520 PC上我不需要通过睡眠通话向设备发送初始设置信息。但是,在其他Windows机器上调试后(列表中的Alienware),我发现如果不调用
Sleep
,尝试发送初始设置消息时会失败

这实际上是一个非常特殊的情况:

  • HID设备正在建立可扩展连接
  • 设备最初关闭,然后打开,Windows事件系统通过对
    WM_DEVICECHANGE
    的进程回调来查找设备到达,在那里
    CreateFile
    WriteFile
    发送安装报告
  • 这仅在某些Windows计算机上发生
下面是一些代码,让您了解错误:

Sleep(500); // this allows me to send a message
BOOL Result = WriteFile(IOHandle, OutputReport, OutputReportSize, &bytesWritten, NULL);
if (Result)
{
    return 0;
}
else
{
    d = GetLastError(); // This is 87 without Sleep
    CloseComm();
    return 1;
}
我的问题是:

1。为什么我得到错误\无效\参数(87),除非调用睡眠


2。为什么在某些Windows计算机上需要这样做

调用
RtlGetLastNtStatus()
就地
GetLastError()
-返回什么?@RbMm该函数的头是什么?没有头文件,但它与
GetLastError
具有相同的签名。因此
extern“C”uu declscpec(dllimport)NTSTATUS WINAPI RtlGetLastNtStatus()并将ntdll.lib包含到链接器input@RbMm它返回87否,我询问的是
RtlGetLastNtStatus()
result,而不是
GetLastError()
result。
RtlGetLastNtStatus()
从不返回0x57