Я разрабатываю приложение 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 ++ без каких-либо ошибок ... или как сделать правильное преобразование типов.