readfile读取usb HID设备延续多次写入读出后读不出来数据

readfile读取usb HID设备连续多次写入读出后读不出来数据
刚解决了写不进去数据的问题,现在发现连续往此HID设备里写入读出若干条数据后,用readfile读出的数据是上一条指令的,buff每次都清空的,或者执行好几次rwitefile、readfile才能返回当前指令应该返回的数据。关键代码如下:
WriteHandle=CreateFile 
(detailData->DevicePath, 
GENERIC_WRITE, 
FILE_SHARE_READ|FILE_SHARE_WRITE, 
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL,
NULL);
ReadHandle=CreateFile 
(detailData->DevicePath, 
GENERIC_READ, 
FILE_SHARE_READ|FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL, 
OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL,
NULL);

//写数据
HANDLE hEventObject;
if (hEventObject == 0)
{
hEventObject = CreateEvent 
(NULL, 
TRUE, 
TRUE, 
"");
DisplayLastError("CreateEvent: ") ;

//Set the members of the overlapped structure.

HIDOverlapped.hEvent = hEventObject;
HIDOverlapped.Offset = 0;
HIDOverlapped.OffsetHigh = 0;
}
if (WriteHandle != INVALID_HANDLE_VALUE)
{
Result = WriteFile 
(WriteHandle, 
OutputReport, 
Capabilities.OutputReportByteLength,
&BytesWritten, 
(LPOVERLAPPED) &HIDOverlapped
//0
);
}
/*Result = */WaitForSingleObject(hEventObject, 2000);
ResetEvent(hEventObject);

//读数据
HANDLE hEventObject1;
if (hEventObject1 == 0)
{
hEventObject1 = CreateEvent 
(NULL, 
TRUE, 
FALSE, 
NULL);
DisplayLastError("CreateEvent: ") ;

//Set the members of the overlapped structure.

HIDOverlapped.hEvent = hEventObject1;
HIDOverlapped.Offset = 0;
HIDOverlapped.OffsetHigh = 0;
}
if (ReadHandle != INVALID_HANDLE_VALUE)
{
Result = ReadFile 
(ReadHandle, 
InputReport, 
Capabilities.InputReportByteLength, 
&NumberOfBytesRead,
(LPOVERLAPPED) &HIDOverlapped); 
}
Result = WaitForSingleObject(hEventObject1, 6000);
switch (Result)
{
case WAIT_OBJECT_0:
{
break;
}
case WAIT_TIMEOUT:
{
Result = CancelIo(ReadHandle);
break;
}
default:
{
break;
}
}
ResetEvent(hEventObject);


这是为什么呢?大家帮忙找找原因。
------解决思路----------------------
你的两个事件对象 hEventObject; 怎么不初始化?
------解决思路----------------------
我的程序与你最大的不同是:
1、读、写分开并由不同的事件进行驱动。
2、一但操作启动,所有的动作和操作均由当前的状态决定,这些状态来自读、写事件,定时器,手动操作,系统消息等。
------解决思路----------------------
读写没必要用不同的HANDLE
WriteFile 调试看是否每次都发送成功了
不要一次发多个数据, HID缓冲可能会被冲掉