无法将"wchar_t"转换为"LPCSTR"
Cannot convert 'wchar_t' to 'LPCSTR'
我使用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版本。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 'HMODULE LoadLibraryA(LPCSTR)':无法将参数 1 从 'const _Elem *' 转换为 'LPCSTR'
- 如何将 std::filesystem::p ath 转换为 LPCSTR,以便在 LoadLibrary() 变体之一
- 无法将"wchar_t"转换为"LPCSTR"
- LPCTSTR 到 LPCSTR 的转换
- 将无符号字符转换为 LPCSTR
- 如何从字符串转换为LPCSTR,如果有的话?(C++)
- 无法将'LPCWSTR {aka const wchar_t*}'转换为 'LPCSTR {aka const char*}
- C++/cli将LPCSTR转换为System::String^
- 如何在 Visual Studio 2013 中将 Qt5 中的 QString 转换为 LPCSTR
- 如何在C++中将 HWND 转换为 LPCSTR
- 如何在 Win32 C++ 中将类型 "int" 转换为类型 "LPCSTR"
- #定义转换为LPCSTR或std::string的字符串
- 如何将LPCSTR转换为WCHAR*
- 如何将LPCSTR传递给c++函数转换为字符串并返回LPCSTR ?
- 错误:无法在分配中将'const wchar_t [13]'转换为'LPCSTR {aka const char*}'