无法将"wchar_t"转换为"LPCSTR"

Cannot convert 'wchar_t' to 'LPCSTR'

本文关键字:转换 LPCSTR wchar      更新时间:2023-10-16

我使用Atom作为编辑器,我有g++编译器来编译我的C++文件。

有问题的代码片段是:

bool openComPort(wchar_t* portSpecifier)
{
DCB dcb;
// Open Serial Port
wprintf(L"Opening COM PORT: %s",portSpecifier);
printf("n");
serialPort = CreateFile(portSpecifier,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (serialPort == INVALID_HANDLE_VALUE)
{
wprintf(L"Error opening Serial port: %sn",portSpecifier);
return(false);
}
...
return true;
}

如果我想编译它,我总是会得到错误:

错误:无法将"wchar_t"转换为"LPCSTR"{aka"const char"}serialPort=CreateFile(portSpecifier,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL(;

我读过它应该与Windows和UNICODE或ASCII有关。

我通过按ctrl+shift+U并选择UTF-8来确保Atom使用UNICODE。

我一开始尝试#define UNICODE。没用。

我尝试过与其他线程不同的解决方案,如:

(_TCHAR*)wprintf(L"Opening COM PORT: %s",portSpecifier);

不过我总是犯同样的错误。你对如何解决这个问题有什么建议吗?

尝试将CreateFile更改为CreateFileW。

微软有两个版本的所有涉及字符串的旧Win32调用,一个用于多字节字符集,另一个用于它所称的Unicode,即UTF-16/UCS-2,基本上每个字符两个字节的Unicode。如果API调用是CreateFoo,那么调用的两个版本将是CreateFooA和CreateFooW,那么在Windows头中的某个位置,CreateFoo将被定义为扩展到CreateFooA或CreateFooW的宏,具体取决于是否定义了UNICODE预处理器定义。

如果您在VisualStudio中工作,则该预处理器定义的声明由GUI中的项目设置控制。如果使用宽字符,请尝试直接调用CreateFile的Unicode版本。