Suche registry-Profi
-
Hello....also ich hab schon letzt woche gepostet, doch keine exakte antwort bekommen.
Ich verusch nochmal das Problem zu beschreiben:
Innerhalb einer For-Schleife bekommt eine char* Variable einen anderen Wert (gut so!). Wenn ich das Programm debugge, zeigt diese Variable auf eine Speicherstelle an der
Folgendes steht: "Software\\Netscape\\Netscape 6" + \x0 -- ein ganz gewöhnlicher Null-terminierter String.Ich rufe RegOpenKeyEx() auf:
tmp wird im Original anders initialisiert, zeigt aber genauso auf eine Null-terminierte SpeicherstelleHKEY phkResult; int err; char *tmp = "Software\\Netscape\\Netscape 6\x0"; err = RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)tmp,(PHKEY)&phkResult);
Ob ich type-casts verwende oder nicht, macht keinen Unterschied. Habe ich meine Maschine gerade frisch gestartet und beginne zu debuggen, erhält err den Wert "57". Laut winerror.h eine Hardware-Fehler meines Netzwerk-Adapters
Dann stoppe ich den Debug-Prozess, ersetzte "(LPCTSTR)tmp" mit "Software\\Netscape\\Netscape 6", starte den Debugger und siehe da, die Funktion liefert 0 zurück.
Dann ersetze ich "Software\\Netscape\\Netscape 6" mit "(LPCTSTR)tmp", starte den Debugger und siehe da, die Funktion liefter wieder 0 zurück!!!
Ich habe da verschiedene Registry-Pfade, aber alle funktionieren erst, wenn ich sie vorher schon einmal mit dem direkten Parameter "Software...." geöffnet habe, und dann erst mit einer Variable. Ansonsten bekomm ich den Netzwerk-Adapter-Hardware-Error ??!!!!
Hat irgendwer einen Rat, ich bin schon am Verzweifeln
Achja, es ist auch egal, ob ich RegOpenKey() oder RegOpenKeyEx() verwende. System ist WinXP und VC++ 6
-
Hast du Schreibrechte in HKLM?
-
ja, sicherlich.....sonst würds ja auch nicht gehen, wenn ich als Parameter "Software\..." anstatt tmp verwende......
hab mir das auch schon öfters gedacht, aber das kanns nicht sein.....
-
Wieso nicht so?
char dest[256]="Software\\Netscape\\Netscape 6";
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,dest,0,KEY_ALL_ACCESS,&hkey)==ERROR_SUCCESS)
-
....weil dadurch der Rückgabewert genauso 57 ist, nur, dass dieser vorher nicht in einer Variable gespeichert wird und somit im Debugger gar nicht angezeigt werden kann. Die IF-Anweisung wird also nie TRUE ergeben....
[ Dieser Beitrag wurde am 04.02.2003 um 15:59 Uhr von Sneaker editiert. ]
-
Was liefert den GetLastError(); ?
[ Dieser Beitrag wurde am 04.02.2003 um 16:13 Uhr von flenders editiert. ]
-
GetLastError() liefert 0 .....
-
Hast du schon LPCTSTR tmp = "Software\\Netscape\\Netscape 6\x0"; probiert?
[ Dieser Beitrag wurde am 04.02.2003 um 16:49 Uhr von flenders editiert. ]
-
versuche dies:
temp[strlen (temp)] = '\0' ;
-
Also ich hab das Problem gelöst. Der String war Null-terminiert, aber:
@flenders: Deine Methode funktioniert, egal ob mit char* oder LPCTSTR
@toom: Die Null war da, das hat also nicht funktioniertDas Problem lag am String:
Wenn ich mit tmp mit
char *tmp = "Software\\Netscape\\Netscape 6\x0"
initialisiere, ersetzt er die beiden "\" im Speicher durch "\". Lese ich jetzt aber eine Datei aus, in der ebenfalls "\" steht, so befindet sich dann im Speicher 2 Backslashes und das ganze schlägt fehl.
Der Fehler war also, dass mein String im Speicher mit 2 "\" geschrieben war....