sci*_*guy 3 c++ qt wchar-t type-conversion char
我的C++代码中出现了一个我无法理解的错误.剥离的代码位在这里:
RS232Handle=OpenRS232("COM1", 9600);
HANDLE OpenRS232(const char* ComName, DWORD BaudRate)
{
ComHandle=CreateFile(ComName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: cannot convert 'const char*' to 'LPCWSTR {aka const wchar_t*}' for argument '1' to 'void* CreateFileW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)'
ComHandle=CreateFile(ComName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Run Code Online (Sandbox Code Playgroud)
代码取自VS代码,我现在正在使用Qt创建者.
我该如何解决这个问题?谢谢!
dan*_*n04 14
Windows CreateFile函数实际上是一个扩展为以下之一的宏:
CreateFileA,它采用类型的文件路径 const char*CreateFileW,它采用类型的文件路径const wchar_t*.(对于采用字符串的Windows API中的大多数函数也是如此.)
您正在声明参数const char* ComName,但显然是使用已UNICODE定义的编译,因此它调用W函数的版本.有来自没有自动转换const wchar_t*到const char*,因此错误.
您的选择是:
const wchar_t*)字符串.char*参数,但是让你的函数显式地将它转换为UTF-16字符串,其函数类似于MultiByteToWideChar.CreateFileA而不是CreateFile.UNICODE,以便宏A默认扩展到版本.有很多方法可以解决这个问题
请注意,在某些错误处理例程中,字符串特别是 MBCS