Open a COM port in C++ with number higher that 9

别来无恙 提交于 2019-11-29 04:14:57
Jeeva

It is a bug and the resolution is to use the string

\\.\COM10

hPort = CreateFile("\\\\.\\COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

check this article.

You need to use the following format for COM ports greater than 9:

\\\\.\\COM%d

Where %d is a printf-substitution for the port number.

Why? Well, this accesses the global NT object space, where all objects are stored. Windows only knows to alias COM0-9 in the fashion you're using it for DOS support; beyond that, they act like ordinary devices, which are accessed this way.

To explore the NT object space, I recommend WinObj which basically lets you browse around. \.\ is mapped to GLOBAL?? in this tree (as are some other areas, actually. The rest of the tree requires you have NT's, as opposed to Win32's, view of the system).

And just in case you didn't know, INVALID_HANDLE_VALUE is defined as 0xffffff... - this usually occurs when an open fails.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!