阅读:1100回复:0
使用overlap时,为什么有时会出错,有时又正确通过?附代码如下
int usb_read(HANDLE h_read,void* buffer,int size,int *p_count)
{ int ret_code=SUCCESS; OVERLAPPED lc_overlap; DWORD ret_count; memset(buffer,0,size); lc_overlap.hEvent=CreateEvent(NULL,true,false,NULL); if(!ReadFile(h_read,buffer,size,(PDWORD)p_count,&lc_overlap)) { if(GetLastError()==ERROR_IO_PENDING) { ret_count=WaitForSingleObject(lc_overlap.hEvent,TIMEOUT); if(ret_count==WAIT_TIMEOUT) { CancelIo(h_read); ret_code=ETIMEOUT; } } else { DeviceIoControl(h_read,IOCTL_JBCJ_RESET_PIPE,0,0,0,0,&ret_count,&lc_overlap); ret_code=EUSB_READ_FAIL; } } GetOverlappedResult(h_read,&lc_overlap,(PDWORD)p_count,false); CloseHandle(lc_overlap.hEvent); return ret_code; } 报参数不对。但我保证参数不会有问题。 GetLastError()返回87,并且我观察过,驱动里根本就没有接收到此请求。 |
|