IM developin QT应用,并且我需要包括纯的C代码。当我在code :: blocks中编译这段代码时,它是成功的,也许是一个警告,但是当我尝试在QT创建器中编译它时,我得到这4个错误。无法转换的char *到WCHAR * [QT/C++]
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代码而没有任何错误...或如何进行正确的类型转换。
这似乎是一个可行的解决方案,但我仍然有一个错误在这个功能,这里是原型int getKeyboardLayoutFile(字符* layoutFile,DWORD缓冲区大小),并在这里是给出错误的函数调用>> if(RegQueryValueExA(hKey,“Layout File”,NULL,&varType,layoutFile,&bufferSize)!= ERROR_SUCCESS),并且错误是“错误:从'char *'无效转换为'BYTE *'”,“error:初始化参数5'LONG RegQueryValueExA(HKEY __ *,const CHAR *,DWORD *,DWORD *,BYTE *,DWORD *)'“ – 2012-03-19 17:05:48
好吧,它真的很简单(BYTE)* – 2012-03-19 17:57:23