windows-7 – Windows 7上的SetCommState失败

前端之家收集整理的这篇文章主要介绍了windows-7 – Windows 7上的SetCommState失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的代码与我们的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,"SerialPort::openPort") << "SetCommState Failed for" << m_portName << dwError;
    return 0;
}

什么想法可能会出错?一个想法是USB设备描述符是不正确的,Win7更严格的双重检查(但我有点怀疑,因为该设备在MacOS X和Linux下正常工作没有问题).我很难过!

解决方法

如果你正在使用64位,也许你必须将dcb.DCBLength设置为sizeof(DCB),而不是8的下一个最高倍数.

猜你在找的Windows相关文章