U
Es gibt zwei Wege zum Ziel:
Enweder man schaltet den Compiler von UNICODE auf MULTIBYTE. Dann ist LPTSTR nur ein typedef für char*. Oder, falls, wie bei meinen Programm, UNICODE benötigt wird, nimmt man Weg 2.
#include <stdlib.h>
char* registry::readString(HKEY hKey, TCHAR* hSubKey, TCHAR* hValue) {
HKEY NEWhKey;
TCHAR SubKey[MAX_PATH];
TCHAR Data[MAX_PATH];
lstrcpy(SubKey, hSubKey);
lstrcpy(Data, hValue);
DWORD dwData=0;
LPTSTR *bData;
RegOpenKey(HKEY_LOCAL_MACHINE,SubKey,&NEWhKey);
if(RegQueryValueEx(NEWhKey, Data, 0, 0, (PBYTE)NULL, &dwData)==ERROR_SUCCESS && NEWhKey!=NULL) {
bData=(LPTSTR *)malloc(sizeof(LPTSTR)*dwData);
RegQueryValueEx(NEWhKey, Data, 0, 0,(PBYTE)(LPTSTR)bData,&dwData);
}
RegCloseKey(NEWhKey);
char *cData=(char *)malloc(sizeof(char)*dwData);
wcstombs(cData, (wchar_t*)bData,dwData);
return cData;
}
Oder zumindest so ähnlich...
wcstombs(cData, (wchar_t*)bData,dwData); konvertiert hier einen "widecharacterstring to multibytestring".
Weitere Infos hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-171319-and-highlight-is-wchart.html