USB讀寫時,能通過CreateFile獲取句柄,呼叫WriteFile或者ReadFile時總是回傳失敗,錯誤碼是997,下面是寫入HID的代碼
if(m_hUsb==INVALID_HANDLE_VALUE)return;
unsigned char OutputBuffer[70];
DWORD nWriteBytes;
HANDLE WriteEvent = CreateEvent(NULL, true, false, NULL);
OVERLAPPED writeOverlap;
writeOverlap.hEvent = WriteEvent;
writeOverlap.Offset = 0;
writeOverlap.OffsetHigh = 0;
UpdateData(TRUE);
OutputBuffer[0] = 0x00;
OutputBuffer[1] = 0x01;
OutputBuffer[2] = 0x02;
OutputBuffer[3] = 0x03;
// for(int i=1; i-1<m_SendStr.GetLength();i++)
// {
// OutputBuffer[i] = m_SendStr.GetAt(i-1);
// //WideCharToMultiByte
// }
ResetEvent(WriteEvent);
DWORD len = m_SendStr.GetLength() + 1;
if (WriteFile(m_hUsb, &OutputBuffer, 65, &nWriteBytes, &writeOverlap))
{
AfxMessageBox(_T("Succ write"));
}else
{
DWORD Err = GetLastError();
cout<<Err;
}
求指點,謝謝
uj5u.com熱心網友回復:
997重疊 I/O 操作在進行中。
你是否多次重復打開讀寫操作,記得每次使用完釋放掉。。
uj5u.com熱心網友回復:
帥哥你的程式是不是訊息收發?可否傳個原始碼?感激不盡
uj5u.com熱心網友回復:
本來就是這樣啊,你的IO 正在進行中。你既然啟用了異步傳輸,就要等待完成啊!
當 WriteFile 回傳 TRUE,表示此時已經完成。
當 WriteFile 回傳 FALSE,檢測 LastError 為 ERROR_IO_PENDING 的時候。
使用 GetOverlappedResult 檢測是否傳輸完成。
uj5u.com熱心網友回復:
后面 還要處理 GetOverlappedResultDWORD Err = GetLastError();
if(Err == ERROR_IO_PENDING)
{
if(GetOverlappedResult(m_hUsb, &writeOverlap, &nWriteBytes, TRUE))
……
}
uj5u.com熱心網友回復:
你這個函式中需要加入“狀態”控制機制,才可以在收到讀、寫事件成功事件時,能自動進入相應的處理。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/134081.html
標籤:硬件/系統
上一篇:【求助】如何更改所有視窗最大最小化效果,為開關視窗的效果。
下一篇:短信貓怎樣實作用戶評價系統?
