2015年(29)
分类: C/C++
2015-04-30 10:46:00
问题:用微软提供的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及其以上的串口号,可用“”的形式进行替换。