尝试配置 COM 端口时设置 DCB 失败

2023-11-25

我正在尝试编写一个使用串行端口(例如 COM8)的 C++ MFC 应用程序。每次我尝试设置 DCB 时都会失败。如果有人能指出我做错了什么,我将非常感激。

DCB dcb = {0};

dcb.DCBlength = sizeof(DCB);
port.Insert( 0, L"\\\\.\\" );

m_hComm = CreateFile(
    port,                           // Virtual COM port
    GENERIC_READ | GENERIC_WRITE,   // Access: Read and write
    0,                              // Share: No sharing
    NULL,                           // Security: None
    OPEN_EXISTING,                  // The COM port already exists.
    FILE_FLAG_OVERLAPPED,           // Asynchronous I/O.
    NULL                            // No template file for COM port.
    );

if ( m_hComm == INVALID_HANDLE_VALUE )
{
    TRACE(_T("Unable to open COM port."));
    ThrowException();
}

if ( !::GetCommState( m_hComm, &dcb ) )
{
    TRACE(_T("CSerialPort : Failed to get the comm state - Error: %d"), GetLastError());
    ThrowException();
}

dcb.BaudRate = 38400;               // Setup the baud rate.
dcb.Parity = NOPARITY;              // Setup the parity.
dcb.ByteSize = 8;                   // Setup the data bits.
dcb.StopBits = 1;                   // Setup the stop bits.

if ( !::SetCommState( m_hComm, &dcb ) ) // <- Fails here.
{
    TRACE(_T("CSerialPort : Failed to set the comm state - Error: %d"), GetLastError());
    ThrowException();
}

Thanks.

附加信息:生成的错误代码为87:“参数不正确。” 应该是微软的most有用的错误代码。焦/克


我的钱都花在这个上了:

dcb.StopBits = 1; 

MSDN 文档关于 StopBits 是这样说的:

要使用的停止位的数量。该成员可以是其中之一 以下值。

ONESTOPBIT    0    1 stop bit.
ONE5STOPBITS  1    1.5 stop bits.
TWOSTOPBITS   2    2 stop bits.

所以,你要求 1.5 个停止位,这是一个非常古老的东西,我什至不记得它来自哪里。电传打字机,可能。

我猜你的驱动程序/硬件支持这种模式的机会很小,因此会出现错误。

所以,将其更改为dcb.StopBits = ONESTOPBIT;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试配置 COM 端口时设置 DCB 失败 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 编译器在函数名称前添加下划线前缀的原因是什么?

    当我看到 C 应用程序的汇编代码时 如下所示 emacs hello c clang S O hello c o hello s cat hello s 函数名称以下划线作为前缀 例如callq printf 为什么这样做以及它有什么优点
  • 使用 Visual Studio 复制文件?

    我想创建一个 Visual Studio 我正在使用 VSTS 2008 项目 它只执行文件复制工作 更详细地说 我将向该项目添加一些文件 并将该项目复制文件 包含在该项目中 到某个目标位置我构建该项目 有什么想法如何在 VSTS 中做到这
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • 表单.位置不起作用

    我之前问过这个问题 以为我已经解决了 但它仍然不起作用 Form Show 稍微移动表单位置 https stackoverflow com questions 1214014 form show moves form position s
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • RabbitMQ + Windows + LDAP 无需发送密码

    我正在尝试在 Windows 7 上使用 RabbitMQ 3 6 2 进行 LDAP 身份验证 授权 我已经在应用程序发送用户名 密码的情况下进行了基本身份验证 但密码位于我需要弄清楚如何进行的代码中避免 有没有人在不提供密码的情况下成功
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • 为什么 32 位 .NET 进程的引用类型的最小大小为 12 字节

    我正在读专业 Net 性能 https rads stackoverflow com amzn click com 1430244585本书有关参考类型内部结构的部分 它提到 对于 32 位 net 进程 引用类型具有 4 字节的对象头和
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • Java FX 2 警报声音

    如何在 Java FX 2 中播放警报声音 有没有办法使用操作系统默认通知声音 使用纯 JavaFX 播放声音 只需使用一个实例AudioClip 这非常适合仅演奏单个短音 播放默认通知声音 关于 Windows 操作系统 有一种方法可以通
  • 自定义首选项 Android Kotlin

    我想子类化Preference在 Kotlin 中创建自定义首选项 我无法在 首选项 屏幕中获取要膨胀的自定义首选项 如果我从我的首选项屏幕中删除此自定义首选项 我已实现的其余首选项 此处未显示 工作正常 类似的还有很多seeming这里有
  • Google Maps JS API v3 - 简单的多标记示例

    Google Maps Api 相当新 我有一组数据想要循环浏览并绘制在地图上 看起来相当简单 但我发现的所有多标记教程都相当复杂 让我们使用 Google 网站上的数据数组作为示例 var locations Bondi Beach 33
  • Cloud Endpoint 参数不应命名

    我想发送一个HashMap
  • 跨域获取iframe当前src url [重复]

    这个问题在这里已经有答案了 我的网络应用程序中有一个 iframe 我需要从父文档获取其当前 url 当用户导航框架并更改原始源 url 时 只需要 URL 即可进行社交分享 作为跨域场景 我不拥有子文档 它是远程域 我知道同源策略可以防止
  • 在 UIWebView 中启用 Cookie

    如何在使用 UIWebView 窗口的 iPhone 应用程序中启用 cookie 以便我的登录系统正常工作 肯定是从 NSHTTPCookieStorage sharedHTTPCookieStorage cookieAcceptPoli
  • 在一定时间后自动关闭窗口

    在一个类中 在一个函数中 我正在创建一个 Tkinter Canvas 该函数正在被另一个类调用 我希望 Tkinter 窗口弹出 30 秒 然后自行关闭 我有打电话 master mainloop time sleep 30 master
  • 如果字段值为空,如何告诉 Jackson 在序列化期间忽略该字段?

    如果该字段的值为空 如何将 Jackson 配置为在序列化期间忽略该字段值 例如 public class SomeClass what jackson annotation causes jackson to skip over this
  • 在 Swift 中,为什么分配给静态变量也会调用它的 getter

    我知道在 Swift 中 静态变量是隐式惰性的 https stackoverflow com a 34667272 1672161 但我不清楚为什么会发生这种情况 protocol HatType class Hat HatType in
  • C++ 中的运算符=重载

    在 C Primer 一书中 它有一个 C 风格字符数组的代码 并展示了如何重载 文章中的运算符15 3 运算符 String String operator const char sobj sobj is the null pointer
  • 发布子类集合

    我要求用户编辑潜在客户的报价列表 报价可以是不同的类型 例如 产品类型 A 的报价 产品类型 B 的报价 所有报价类型共享一个公共基类 例如 QuoteBase 我的报价在前端显示得很好 并且似乎也回发了正确的数据 然而 在服务器上它显然不
  • 如何使用ADB将一些文本复制到android系统剪贴板?

    我想在我的 root Android Oreo 上自动执行一些操作 但似乎找不到将某些文本复制到剪贴板的方法 我可以粘贴复制的文本adb shell input keyevent 279所以希望能找到一些复制文本的方法 P S 不寻找建议的
  • 构造函数的模板参数推导[重复]

    这个问题在这里已经有答案了 C 0x 是否具有 或者 C 0x 在某个时间点将会具有 构造函数的模板参数推导 在即将推出的 C C 0x 标准概述 我看到了以下几行 std lock guard l m at 7 00 std thread
  • 使用 C++ 源代码包含相关的 Boost 库(使用 Visual Studio)

    我正在开发一个项目 为学校 我正在深入研究 Boost 库来寻找解决方案 我需要某种方法来将所需的 Boost 源代码与我的应用程序一起分发 以便可以在不需要在系统上安装库进行编译的情况下对其进行编译 学校电脑几乎没有你能提到的任何东西 学
  • IE TextRange 选择方法无法正常工作

    我在使用 contentEditable 设置为 true 的 IE 文档时遇到异常问题 在位于紧邻块元素之前的文本节点末尾的范围上调用 select 会导致选择内容向右移动一个字符并出现在不应出现的位置 我已向 Microsoft 提交了
  • 使用模板元编程进行计数?

    一段时间以来 我一直在尝试 断断续续地 想出一个创造性的解决方案来解决这个问题 但到目前为止我还没有做到 我最近认为它可能可以通过模板元编程来解决 尽管由于我相对缺乏该技术的经验 我不确定 是否可以使用模板元编程 或 C 语言的任何其他机制
  • SQL Server 中计算中位数的函数

    根据MSDN Median 不可用作 Transact SQL 中的聚合函数 但是 我想知道是否可以创建此功能 使用创建聚合函数 用户定义的函数或其他一些方法 执行此操作的最佳方法 如果可能 是什么 允许在聚合查询中计算中值 假设数字数据类
  • 如何在 UWP 应用中播放 .mp3(或其他)文件?

    我试试这个 PlayMusic new MediaElement PlayMusic AudioCategory Windows UI Xaml Media AudioCategory Media PlayMusic Source new
  • 使用 ObjectId 查询 RMongo

    有没有办法在 RMongo 中使用 ObjectId 进行查询 就像是 results lt dbGetQuery mongo users id ObjectId 5158ce108b481836aee879f8 也许通过导入 bson 库
  • 尝试配置 COM 端口时设置 DCB 失败

    我正在尝试编写一个使用串行端口 例如 COM8 的 C MFC 应用程序 每次我尝试设置 DCB 时都会失败 如果有人能指出我做错了什么 我将非常感激 DCB dcb 0 dcb DCBlength sizeof DCB port Inse