我们有与我们的USB COMM类设备对话的代码,它在Windows下运行良好,但在Windows7下运行失败。特别是对SetCommState的调用失败。这是一个简化的代码片段。请注意,在本例中,我们甚至没有更改GetCommState中的任何字段,但结果是SetCommState失败,错误代码为87 (非法参数)。
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下运行良好,没有问题)。我被难住了!
发布于 2010-09-23 01:23:17
如果你在64位上工作,也许你必须将dcb.DCBLength设置为8的下一个最大倍数,而不是sizeof(DCB)。
https://stackoverflow.com/questions/3704351
复制相似问题