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