簡體   English   中英

無法將char *轉換為WCHAR * [qt / c ++]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM