You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DEV-C++编译RS232串口通信程序报错:bool无法转void*

解决ReadFile参数类型不匹配的问题

嘿,这个问题很常见,我来帮你捋清楚!

你遇到的错误根源是ReadFile的第二个参数传错了——函数要求第二个参数是一个指向接收缓冲区的void*,但你写的&cadena[rebut]==0是一个布尔表达式(用来判断缓冲区地址是否为空),这就导致了bool类型无法转换成void*的类型不匹配错误。

错误代码的问题点

你的原代码:

ReadFile(m_hComm, &cadena[rebut]==0, 1, &recibiendo, NULL);

这里的&cadena[rebut]==0是一个比较操作,返回的是true或false,完全不符合ReadFile对第二个参数的要求。

正确的写法

你需要直接传递接收缓冲区的指针作为第二个参数,把那个多余的==0去掉。修改后的代码应该是:

ReadFile(m_hComm, &cadena[rebut], 1, &recibiendo, NULL);

额外说明(如果你原本的意图是检查读取到的字节)

如果你的初衷是想判断读取到的字节是否为0(比如把0作为通信结束符),那应该在ReadFile调用成功之后再做判断,而不是把判断逻辑写到参数里。举个例子:

// 先执行读取操作
BOOL readResult = ReadFile(m_hComm, &cadena[rebut], 1, &recibiendo, NULL);

// 检查读取是否成功,且确实读到了数据
if (readResult && recibiendo > 0) {
    // 现在判断读到的字节是否为0
    if (cadena[rebut] == 0) {
        // 这里写你处理结束符的逻辑,比如终止接收循环
    }
}

小提示

另外要注意,DOS和Windows之间的串口通信,一定要确保两边的串口配置完全一致:波特率、数据位(通常8位)、停止位(通常1位)、奇偶校验(通常无),不然很容易出现读取乱码或者通信失败的情况。

内容的提问来源于stack exchange,提问作者Alvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:44:12