Registry werte auslesen
-
Hallo,
ich hab nen kleines Prog geschrieben, was verschiedene Werte aus der Registry holen soll und sie in einer Datei ablegt. Das merkwürdige ist, manchmal gehts, manchmal nicht. UNd wenn es dann mal nicht ging und ich selber mit regedit nachgeguckt habe ob der wert denn noch wirklich da ist gehts wieder hat da einer eine idee?
#include <windows.h> #include <fstream> #include <string> using namespace std; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ){ LONG lnResult; HKEY hKey; fstream logfile( "log.txt", ios::out ); fstream keyfile( "config.cfg", ios::in ); if( keyfile.is_open() ){ while( !keyfile.eof() ){ string reghive; string regkey; string regvalue; getline( keyfile, reghive ); getline( keyfile, regkey ); getline( keyfile, regvalue ); lnResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey.c_str(), 0, KEY_READ, &hKey); if ( ERROR_SUCCESS != lnResult ) { logfile << regkey << " nicht gefunden in der Registry!\n"; } else{ DWORD dwSize = 50; // size of buffer DWORD dwType; unsigned char* szRegKey = (unsigned char *)malloc(50); if ( NULL == szRegKey ) { logfile << "Ich hab nen NULL-Pointer!\n"; } lnResult = RegQueryValueEx(hKey, regvalue.c_str(), NULL, NULL, szRegKey, &dwSize); if( ERROR_MORE_DATA == lnResult ){ logfile << "Buffer zu klein!\n"; } else if ( ERROR_SUCCESS != lnResult ) { logfile << regvalue << " Value nicht in der Registry!\n"; } else{ logfile << (char*) szRegKey << endl; } free( szRegKey ); RegCloseKey(hKey); } } keyfile.close(); } logfile.close(); }Nin etwas verwundert warum das manchmal geht manchmal net..Hat da einer ne idee?
gruß
-
Meine Kristallkugel hab ich natürlich auch nicht da aber:
- warum beachtest Du den Typ nicht der mit dem Wert zurückgegeben wird? (du gehst einfach davon aus, dass es ein String ist)
- Wenn Du den Speicher mit "malloc" nicht allokieren kannst, und dies schon abfragst, dann Verwende den Buffer bitte nicht anschliessend...
- Dein Code geht nur wenn mit ANSI/MBCS übersetzt wird (ist ab VC8 per default auf UNICODE)
-
hi
zum 1ten punkt. ich habe es bisher nur für strings verwendet und habe deswegen nur mit strings an der stelle gearbeitet.
zum 2ten punkt. mmmmhh gute frage, kann dir da leider keine antwort geben warum ich das erst prüfe und dann trotzdem verwende auch wenn ich ggf. das nicht genug speicher da ist..hab da wohl nicht weit genug gedacht...
zum 3ten punkt. da bräuchte ich eine erklärung. was hat es mit /mbcs auf sich? bzw. warum geht er nur mit ANSI/MBCS ? bin da nicht ganz so fit..
-
ConfusedGuy schrieb:
zum 3ten punkt. da bräuchte ich eine erklärung. was hat es mit /mbcs auf sich? bzw. warum geht er nur mit ANSI/MBCS ? bin da nicht ganz so fit..
MBCS (Multi-Byte-Character-Set) macht heute eigentlich niemand mehr. Stand heute ist eigentlich die verwendung von UNICODE in sämtlichen Applikationen.
Deine ganzen STL klassen können alle noch kein Unicode... dazu müsstest DU die W-Versionen verwenden. Die STL hat auch noch den grossen nachteil, dass es keine einheitliche Möglichkeit gibt für ANSI und UNICODE zu übersetzen. Dazu müsstest Du selber ein define erfinden wie "_tstring":#ifdef _UNICODE #define _tstring wstring #else #define _tstring string #endifAuch Deine ganzen strings solltest Du in "_T()" einschliessen...
-
mmhhh, wenn ich mich da richtig erinnere gibt es doch in der WinAPI sowas wie TEXT( ) bzw. T() was genau das macht was du geschrieben hast. oder nimmt mich meine erinnerung da grad auf die schippe?
wäre doch genau das..
edit: ne da hab ich mich getäuscht...es gibt zwar wirklich TEXT() bzw. T() das funzt ja aber nur bei texten die hardcodiert wären, also im program text stehen..
deine idee wäre ja dann eher so zu nutzen.
_tstring meinestringvariable;
seh ich das richtig?
-
Genau... und das für *alle* STL-Klassen die was mit strings machen (eigentlich sollte jemand einmal so eine Define-File definieren, dann könnte man diese einfach einbinden und es bräuchte nicht jeder selber machen...
-
ja dann mal auf

mmhhh, wundert mich das sich dessen noch keine organisation angenommen hat sondern erstmal gewartet wird bis jeder seine eigene lösung hat um dann wieder alles zu standartisieren..
merkwürdig.ich werde mich morgen oder so nochmal mit meinem programm befassen und es überarbeiten, ich poste dann nochmal den neuen code.
danke schonmal
