2010-09-13 145 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

相关问题