4
我們有與我們的USB COMM類設備交談的代碼,在Windows XP下工作正常,但在Windows 7下失敗。特別是對SetCommState的調用失敗。這裏有一個簡化的片段。請注意,在這種情況下,我們甚至不會從GetCommState中更改任何字段,但結果是SetCommState會失敗,並顯示錯誤代碼87(非法參數)。SetCommState在Windows 7上失敗
DCB dcb;
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
if (!GetCommState(m_hIDComDev, &dcb)) {
DWORD dwError = GetLastError();
CloseHandle(m_hIDComDev);
dlDebug(5, "SerialPort::openPort") << "GetCommState failed for" << m_portName << dwError;
return 0;
}
dlDebug(5, "SerialPort::openPort") << m_portName << "rate" << dcb.BaudRate << "size" << dcb.ByteSize;
// dcb.BaudRate = baud;
// dcb.ByteSize = 8;
if (!SetCommState(m_hIDComDev, &dcb)) {
DWORD dwError = GetLastError();
CloseHandle(m_hIDComDev);
dlDebug(5, "SerialPort::openPort") << "SetCommState failed for" << m_portName << dwError;
return 0;
}
任何想法可能會出錯?一個想法是,USB設備描述符不正確,Win7對雙重檢查更加嚴格(但我對此略有懷疑,因爲該設備在MacOS X和Linux下正常工作時沒有問題)。我很難過!
下一個最大的多,我現在也有這個問題,你有沒有發現一個辦法? – daaxix 2013-04-04 19:10:21