我正在开发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代码而不出现任何错误...或者如何进行正确的类型转换。