Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114683
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 242
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-17 13:36
文章分类

全部博文(29)

文章存档

2015年(29)

我的朋友

分类: C/C++

2015-04-30 10:46:00

VC++打开COM9以上的串口失败

问题:用微软提供的API时,通过CreateFile()函数打开串口,当串口号为COM1~COM9时,串口打开正常,当COM口为COM10及其以上时,CreateFile总是失败,CreateFile返回值为INVALID_HANDLE_VALUE,表示端口无法打开。通过GetLastError()函数获取错误号为2:找不到指定的文件。

 

分析:Win32 API函数CreateFile()除了可打开普通文件外,还可以打开设备,比如可用于打开串口,获得串口句柄,如果COM口为COM1~COM9时,可使用“COM1~COM9”作为文件名传递给CreateFile()函数,函数可成功返回,但是,如果操作对象为COM10及以上的端口,以此种方式命名文件名,调用CreateFile函数会返回INVALID_HANDLE_VALUE,表示端口无法打开。

微软预定义的标准设备中含有“COM1~COM9”,所以这些串口端口作为文件名传递给函数时,操作系统会自动地将之解析为相应的设备。但对于COM10以上的串口,“COM10”之类的文件名系统只视之为一般意义上的文件,而非串行设备。

 

解决方法:COM10及其以上的串口号,可用“”的形式进行替换。

阅读(2219) | 评论(0) | 转发(0) |
1

上一篇:C++之智能指针

下一篇:CSerialPort类的使用

给主人留下些什么吧!~~