CreateFile()、GetCommState()、SetCommState()打开串口失败的原因或许是这个

本文介绍了在C++中使用CreateFile函数打开串口时遇到的类型不兼容问题。当将char *类型的串口名称传递给需要LPCWSTR类型的函数时,会导致错误。在VS2015中,直接进行类型转换并不能解决问题,而是需要按照某百度经验进行操作来成功打开串口。具体原因不明,期待解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主初次在优快云发帖,如果有什么写的不好的地方请多多见谅!

对于一般新手而言,直接使用CreateFile函数时,通常会出现以下错误:

函数 "char *" 类型的实参与 "LPCWSTR" 类型的形参不兼容

例如:

bool openport(char *portname)//打开串口
{
hComm = CreateFile(portname, //串口号
 //GENERIC_READ | GENERIC_WRITE, //允许读写
0,
0, //通讯设备必须以独占方式打开

0, //无安全属性
OPEN_EXISTING, //通讯设备已存在
  //0, //同步I/O
FILE_FLAG_OVERLAPPED, //异步I/O
0); //通讯设备不能用模板打开
if (hComm == INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
return FALSE;
}
else
return TRUE;
}

使用VS2015编译时就会提示实参“portname”出现以上错误

如果此时直接使用关键词“L”或者强制类型转换把原为“char *”的实参转换为“LPCWSTR”,那么悲剧就发生了,无论如何都打不开串口,起初我还一直以为是串口的文件名不正确或驱动有问题。到后来才想到这个参数类型,然后去寻找度娘的帮助,按照以下这个百度h 经验ttp://jingyan.baidu.com/article/7c6fb428629c3a80652c907e.html  操作,困扰了博主许久的问题解决了!虽然不明白是什么原因...如果哪位大神路过请给小弟指点指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值