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
相关产品推荐
相关产品推荐

