【发布时间】:2018-12-29 22:00:53
【问题描述】:
我正在按照教程here进行串口通信
打开然后关闭串口的主要代码如下:
HANDLE hComm;
hComm = CreateFileA((LPCSTR)"COM8", //port name
GENERIC_READ | GENERIC_WRITE, //Read/Write
0, // No Sharing
NULL, // No Security
OPEN_EXISTING,// Open existing port only
0, // Non Overlapped I/O // FILE_FLAG_NO_BUFFERING, // copied from the MFC version
NULL); // Null for Comm Devices
if (hComm == INVALID_HANDLE_VALUE){
DWORD err = GetLastError();
printf("Error in opening serial port\n");
printf("err = 0x%x\n", err);
}
else
printf("opening serial port successful\n");
CloseHandle(hComm);//Closing the Serial Port
如果我使用CreateFile(),代码编译正常但串口没有打开(我收到Error in opening serial port 消息)
在玩了一会儿代码后,我发现CreateFileA() 成功打开了串口(我发现这是唯一的原因是因为当我搜索CreateFile() 函数时,我得到了 MSDN 定义页面CreateFileA() 作为第一个结果
我四处搜索,但找不到两者之间的区别。我找到了this,它说我应该总是CreateFile(),编译器应该做剩下的事情,但它在我的情况下不起作用,只有在我专门使用CreateFileA()时才起作用
CreateFile() 和CreateFileA() 有什么区别,我应该在我的程序中使用哪一个来进行基本的串行端口通信?
Windows 10
Visual Studio 2013 速成版
【问题讨论】:
-
CreateFile 是宏,在 ASCII 配置中定义为 CreateFileA,在 Unicode 配置中定义为 CreateFileW。
-
@Alex 我在我链接的那个旧论坛帖子中发现,我们只应该使用 CreateFile() 并且编译器会将其解析为正确的。它在我的情况下不起作用的原因可能是什么?
-
没有。调用 GetLastError 了解原因。
-
我猜你的程序是用Unicode编译的,所以对于CreateFile和CreateFileW,你需要使用
L"COM8"参数。 -
使用 `_T("COM8"),这应该适用于两种配置。阅读:codeproject.com/Articles/446/…
标签: c visual-studio serial-port