首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SetCommState在Windows7上失败

SetCommState在Windows7上失败
EN

Stack Overflow用户
提问于 2010-09-14 04:55:58
回答 1查看 4.4K关注 0票数 4

我们有与我们的USB COMM类设备对话的代码,它在Windows下运行良好,但在Windows7下运行失败。特别是对SetCommState的调用失败。这是一个简化的代码片段。请注意,在本例中,我们甚至没有更改GetCommState中的任何字段,但结果是SetCommState失败,错误代码为87 (非法参数)。

代码语言:javascript
运行
复制
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下运行良好,没有问题)。我被难住了!

EN

回答 1

Stack Overflow用户

发布于 2010-09-23 01:23:17

如果你在64位上工作,也许你必须将dcb.DCBLength设置为8的下一个最大倍数,而不是sizeof(DCB)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3704351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档