我正试图通过我的usb端口(名为COM15)做一些串行通信,我得到了一个错误。这是发生错误的代码:
HANDLE myPortHandle = CreateFile("COM15",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (myPortHandle == INVALID_HANDLE_VALUE)
{
DWORD lastError = GetLastError();
cout<<"ERROR HERE! = "<<lastError<<endl;
}每次编译程序时,句柄都要打开串口== INVALID_HANDLE_VALUE。我在CreateFile() msdn文档中阅读了使用GetLastError()来获取“扩展错误信息”。现在..。运行代码时,GetLastError()返回的值为:2
在GetLastError()的msdn文档中,它说:
“每个函数设置最后错误代码的文档的返回值部分记录了函数设置最后错误代码的条件。”
我试图在CreateFile() msdn文档的返回值部分中寻找'2‘的含义,但在任何地方都找不到它的含义。
问题:
1)为什么会发生这种情况: myPortHandle == INVALID_HANDLE_VALUE?
2)此外,如果有人可以告诉我,我需要在哪里查看msdn文档,以找到GetLastError()返回的“2”的含义,那就太棒了!
发布于 2015-01-12 19:58:53
Windows错误代码记录在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx
您的错误代码是ERROR_FILE_NOT_FOUND。这意味着找不到COM15。根据这篇文章,您需要使用名称:"\\\\.\\COM15"。
CreateFile()可以用来获取串口的句柄。"Win32程序员的引用“条目"CreateFile()”提到共享模式必须是0,创建参数必须是OPEN_EXISTING,模板必须为NULL。 当您通过"COM1“对文件名使用”COM1“时,COM9()是成功的;但是,如果使用"COM10”或更高版本,则返回消息INVALID_HANDLE_VALUE。 如果端口的名称是\\.\COM10,那么在调用CreateFile()中指定串行端口的正确方法如下: CreateFile(“\\.\ copy 10”,通信设备名称的//地址( fdwAccess,// access (读-写)模式0,//共享模式为空,//安全描述符OPEN_EXISTING的地址,//如何创建0,//文件属性为NULL //句柄,文件的属性为要复制); 注意:此语法也适用于通过COM1通过COM9的端口。某些板会让你自己选择端口名。这种语法也适用于这些名称。
或者从文档到CreateFile本身:
CreateFile函数可以创建通信资源的句柄,例如串口COM1。对于通信资源,dwCreationDisposition参数必须为OPEN_EXISTING,dwShareMode参数必须为零(独占访问),而hTemplateFile参数必须为NULL。可以指定读、写或读/写访问,并且可以为重叠的I/O打开句柄。 若要指定大于9的COM端口号,请使用以下语法:
\\.\COM10。此语法适用于所有允许指定COM端口号的端口号和硬件。
https://stackoverflow.com/questions/27909666
复制相似问题