在C++中打开一个数字大于9的COM端口
Open a COM port in C++ with number higher that 9
我在C++中使用COM端口。我无法打开大于9的COM端口,例如10。这是用于COM端口检测的功能:
WCHAR port_name[7];
WCHAR num_port[4];
for (i=1; i<256; i++)
{
bool bSuccess = false;
wcscpy(port_name,L"COM");
wcscat(port_name,_itow(i,num_port,10));
HANDLE hPort;
//Try to open the port
hPort = CreateFile(L"COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
//hPort = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hPort == INVALID_HANDLE_VALUE)
{
DWORD dwError = GetLastError();
//Check to see if the error was because some other application had the port open
if (dwError == ERROR_ACCESS_DENIED)
{
bSuccess = TRUE;
j=j+1;
}
}
else //The port was opened successfully
{
bSuccess = TRUE;
j=j+1;
CloseHandle(hPort); //closing the port
}
if (bSuccess)array_ports[j]=i;
}
我不明白为什么COM10会把FFFFFFFF丢回HANDLE hPort。
hPort = CreateFile(L"COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
COM9、COM8、COM7等工作正常,
hPort = CreateFile(L"COM9", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
这个问题有解决办法吗?
这是一个错误,解决方案是使用字符串
\.COM10
hPort = CreateFile("\\.\COM10", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
查看这篇文章。
对于大于9:的COM端口,您需要使用以下格式
\\.\COM%d
其中%d
是端口号的printf替换。
为什么?好吧,这访问全局NT对象空间,所有对象都存储在那里。Windows只知道以DOS支持的方式别名COM0-9;除此之外,它们的行为就像普通设备一样,通过这种方式访问。
为了探索NT对象空间,我推荐WinObj,它基本上可以让你四处浏览映射到此树中的GLOBAL??
(实际上,其他一些区域也是如此。树的其余部分要求您具有NT视图,而不是Win32视图)。
万一你不知道,INVALID_HANDLE_VALUE
被定义为0xffffff...
——这通常发生在打开失败时。
相关文章:
- 查找最接近的大于当前数字的数字的索引
- 如何找到大于整数的最小数字
- 如何查找数字大于 5 的数字总和
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- 计算向量中大于数字的元素
- 如何在向量中找到大于某些数字的所有元素
- 如何在给出前两个数字的级数中找到大于 x 的第 n 个最小子数组总和?
- 显示用户输入的平均数大于 50 和所有可被 3 整除的数字的乘积
- 如何在数字大于类型 size_t 的最大数量时使用 std::bitset
- 如何将一个数字(大于8个字节)从字符阵列转换为其ASCII表示
- 如何生成数字,直到它们大于10 000
- C 用户输入4个数字,并且该程序检查它们大于少于
- 为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"
- 给定一个数字n,打印序列中大于或等于n的第一个数字
- bignumber.h arduino如何解析大于10位数字的数字
- 使用单个堆栈的中缀到后缀不适用于大于 9 的数字
- 在字符串中的一行中搜索大于0的数字
- 在整数中存储大于 INT_MAX 的数字
- 获取大于数字的元素数
- 如何获取等于或大于数字的第一个整数值