当使用窗口CreateFile函数寻址串行端口时,我似乎遇到了一点TEXT/UNICODE问题。有人能帮忙指出我的错误吗?将字符串转换为LPCWSTR for CreateFile()以寻址串行端口
我写的VC一个Win32控制台应用程序+ +中使用VS 2008
我可以创建一个句柄来解决串行端口是这样的:
#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的comport是必需的,并且对于那些到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”:无法从“的std :: string”转换参数1' LPCWSTR'
我想也许指定CreateFileA会工作,但那给了基本上相同的错误。
我也试过:
/*
everything else the same
*/
hSerial = CreateFile(TEXT(comID),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);`
也不会编译和回报:错误C2065:LcomID“:未声明的标识符
我没有太多的专家,但我一直在努力在这一段时间了。有人能告诉我如何替换L"\\\\.\\COM20"
用户可以指定comport并使CreateFile仍然可以工作吗?谢谢!
真棒谢谢! – John 2010-09-24 02:48:50
我遇到了同样的问题。这解决了它。谢谢! – 2014-07-14 02:51:23