2010-09-13 182 views
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下正常工作時沒有問題)。我很難過!

+0

下一個最大的多,我現在也有這個問題,你有沒有發現一個辦法? – daaxix 2013-04-04 19:10:21

回答

1

如果你在64位的工作,也許你需要設置dcb.DCBLength不爲sizeof(DCB),但到8

相關問題