c++ - 无法将 char* 转换为 WCHAR* [qt/c++]

标签 c++ c qt wchar

我正在开发 QT 应用程序,我需要包含纯 C 代码。当我在 code::blocks 中编译这段代码时,它是成功的,可能是一个警告,但是当我尝试在 QT creator 中编译它时,我得到了这 4 个错误。

cannot convert 'char*' to 'WCHAR*' for argument '1' to 'UINT GetSystemDirectoryW(WCHAR*, UINT)'
cannot convert 'char*' to 'const WCHAR*' for argument '1' to 'HINSTANCE__* LoadLibraryW(const WCHAR*)'
 cannot convert 'char*' to 'WCHAR*' for argument '1' to 'BOOL 
 cannot convert 'const char*' to 'const WCHAR*' for argument '2' to 'LONG RegQueryValueExW(HKEY__*, const WCHAR*, DWORD*, DWORD*, BYTE*, DWORD*)'

代码在这里>

char systemDirectory[MAX_PATH]; 
GetSystemDirectory(systemDirectory, MAX_PATH); //first error
char kbdLayoutFilePath[MAX_PATH];
kbdLibrary = LoadLibrary(kbdLayoutFilePath); //second error
char kbdName[KL_NAMELENGTH];
GetKeyboardLayoutName(kbdName); //third error
if(RegQueryValueEx(hKey, "Layout File", NULL, &varType, layoutFile, &bufferSize) != ERROR_SUCCESS) //fourth error

我也使用 snprintf 函数,所以我不能只将类型从 char 更改为 WCHAR,因为那样它就不会编译 snprintf

snprintf(kbdKeyPath, 51 + KL_NAMELENGTH,
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s", kbdName);

那么你有什么解决办法吗?首先我尝试将类型从 char 更改为 WCHAR,但随后 snprintf 不起作用,所以我尝试使用 swprinf,但没有成功,因为奇怪的是它没有找到这个函数

int swprintf(wchar_t *wcs, size_t maxlen,
             const wchar_t *format, ...);

不过就是这个

int swprintf(wchar_t *wcs,
                 const wchar_t *format, ...);

那么我的选择是什么?如何在 C++ 环境中无错误地编译纯 C 代码……或者如何进行正确的类型转换。

最佳答案

您正在以 Unicode 模式编译。您可以将编译设置为多字节字符串。发生的问题是那些 Windows API 函数是宏,它们检查您是否正在构建 Unicode,然后调用该函数的 W 或 A 版本(在您的代码中, GetSystemDirectory 实际上是调用 GetSystemDirectoryW。因此,您可以将编译更改为多字节字符串....或者您可以显式更改 api 调用以调用 A 版本(即 获取系统目录A)

关于c++ - 无法将 char* 转换为 WCHAR* [qt/c++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770636/

相关文章:

c - 表达式的目的 (var, var)

c++ - Qt:没有性能问题的(自定义)QWidget 列表

c - 从 C 文件中读取数字

c++ - OpenGL光照根据观察方向改变

c++ - 将服务器响应(std::string)转换为 png 文件

c++ - 如何在 C++/MFC/GDI 中创建一个非常大的位图

c - For 循环未按预期工作

qt - 在 "No qmlscene installed."上的 "QT CREATOR"中收到 "Ubuntu"警告

c++ - Qt Creator 中带有 mingw 的共享库给出 undefined reference 错误

php - 相似数据算法