[英]Cannot convert char* to WCHAR* [qt/c++]
我開發QT應用程序,我需要包括純C代碼。 當我在code :: blocks中編譯這段代碼時,它是成功的,也許是一個警告,但是當我嘗試在QT創建器中編譯它時,我得到了這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
版本(即GetSystemDirectoryA
)
您正在使用UNICODE或_UNICODE定義編譯項目。 檢查項目設置並在必要時刪除定義。 要刪除定義,您可能需要禁用整個項目的unicode支持。
從char
切換到WCHAR
然后解決你的swprintf
問題就這樣做
#define swprintf _snwprintf
在Windows上, swprintf
的原型是
int swprintf( wchar_t *buffer,const wchar_t *format [,argument] ... );
但ISO C標准要求使用以下swprintf
原型
int swprintf (wchar_t *, size_t, const wchar_t *, ...);
出於這個原因,在Windows上,提供了_snwprintf
。
閱讀本文了解更多詳情
http://msdn.microsoft.com/en-us/library/ybk95axf(v=vs.71).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.