으로 변환 할 수 없으며 순수한 C 코드를 포함해야합니다. 내가 코드에서이 코드를 컴파일 할 때 : : 블록, 아마도 하나의 경고가 성공적 이었지만 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 기능을 사용하므로 다음이 늘 현재 snprintf를 컴파일하기 때문에 난 그냥, WCHAR로 문자에서 유형을 변경하지 못할
snprintf(kbdKeyPath, 51 + KL_NAMELENGTH,
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s", kbdName);
문제를 해결하는 방법에 대한 아이디어가 있습니까? 우선은 WCHAR로 문자에서 변경 유형을 시도했지만 다음 현재 snprintf didnt 한 작업, 그래서 내가 swprinf를 사용하려고했으나 성공하지, 이상하게 이후이 기능을 찾을 수 didnt는
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 BUFFERSIZE는)이며, 여기에 >> If (RegQueryValueExA (hKey, "레이아웃 파일", NULL, & varType, layoutFile, & bufferSize) 오류를주는 함수 호출입니다!= ERROR_SUCCESS)이고 오류는 "오류 : 'char *'에서 'BYTE *'로의 잘못된 변환"오류 : 'LONG RegQueryValueExA (HKEY __ *, const CHAR *, DWORD *, DWORD *, BYTE *, DWORD *) ' " –
좋아요, 정말 간단했습니다 (BYTE) * –