使用 Windows CreateFile 函数寻址串行端口时,我似乎遇到了一些 TEXT / UNICODE 问题。有人可以帮忙指出我的错误吗?
我正在使用 VS 2008 在 VC++ 中编写一个 Win32 控制台应用程序。
我可以像这样创建一个句柄来寻址串行端口:
#include <iostream>
#include <windows.h>
#include <string>
int main()
{
HANDLE hSerial;
hSerial = CreateFile( L"\\\\.\\COM20",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
return 0;
}
这工作得很好(该\\\\.\\
位对于大于 COM9 的端口是必需的,并且也适用于那些高达 COM9 的端口)。问题是我的comport 并不总是COM20,所以我想让用户指定它是什么。
以下是我尝试过的一些事情:
#include <iostream>
#include <windows.h>
#include <string>
int main()
{
std::string comNum;
std::cout << "\n\nEnter the port (ex: COM20): ";
std::cin >> comNum;
std::string comPrefix = "\\\\.\\";
std::string comID = comPrefix+comNum;
HANDLE hSerial;
hSerial = CreateFile( comID,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
return 0;
}
这不会编译并返回错误:错误 C2664: 'CreateFileW' : cannot convert parameter 1 from 'std::string' to 'LPCWSTR'
我想也许当时指定 CreateFileA 会起作用,但这给出了基本相同的错误。
我也试过:
/*
everything else the same
*/
hSerial = CreateFile( TEXT(comID),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
它也不会编译并返回:错误 C2065: 'LcomID' : undeclared identifier
我不是专家,但我已经为此工作了一段时间。有人可以告诉我如何以L"\\\\.\\COM20"
用户可以指定 comport 的方式进行替换,这样 CreateFile 仍然可以工作吗?谢谢!