我们的代码与我们的USB COMM类设备对话,它在Windows XP下正常工作但在Windows 7下失败。特别是对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下正常工作没有问题)。我很难过!
答案 0 :(得分:1)
如果您正在使用64位,可能必须将dcb.DCBLength设置为sizeof(DCB),而不是设置为8的下一个最高倍数。