Registry Tutorial
-
Ja aber was ist denn jetzt falsch, denn auch wenn ichs in ein char array ändere, funktioniert es nicht.
-
dann habe ich deine Aussage in deiner vorhergehenden Antwort:
nero-ex schrieb:
mit char klappt es jedenfals.
wohl falsch verstanden...
wie sieht denn jetzt dein aktueller Code aus? Ist das immer noch der von Seite 1 (nur jetzt hoffentlich mit char-Arrays).?
Also klappt jetzt nur noch der Registry-Zugriff nicht? Prüfe auch den Rückgabewert von RegSetValueEx, um den Fehler besser lokalisieren zu können.MfG
-
Der einzige Fehler scheint in der RegSetValueEx Funktion zu sein:
HKEY hKey; RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0); char cString[]="G:\\lol.txt"; RegSetValueEx(hKey,"sav-dat",0,REG_SZ,cString,strlen(cString)+1); RegCloseKey(hKey);
-
nero-ex schrieb:
Der einzige Fehler scheint in der RegSetValueEx Funktion zu sein:
Scheint?

Es gibt eine Möglichkeit, das herauszufinden. Windows SAGT einem sogar, wenn etwas schief läuft. Man muß es halt auswerten (was Du in dem Codestück dort nicht tust). Warum tust Du es nicht? Hat das einen Grund?
-
jetzt habe ich dein Problem erkannt, sorry, aber du hast mich wirklich verwirrt mit dem "jetzt funktioniert es mit char usw...". Du bekommst immer noch einen Fehler beim Kompilieren, denn das kann sich gar nicht kompilieren lassen, da RegSetValueEx einen BYTE-Zeiger erwartet, ein C++-Compiler wie der unter Dev-C++ aber sehr genau auf die Typen achtet (deshalb wohl auch dein Versuch mit BYTE cString[] usw...). Deswegen muß man die explizite Typ-Umwandlung durchführen, im folgenden mit reinterpret_cast:
HKEY hKey; RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0); char cString[]="G:\\lol.txt"; RegSetValueEx(hKey,"sav-dat",0,REG_SZ,reinterpret_cast<BYTE*>(cString),strlen(cString)+1); RegCloseKey(hKey);nur schade, daß die genaue Fehlermeldung in der DevC++-IDE so "verschluckt" wird, denn mit der kompletten Meldung hätte man es gleich gesehen.
MfG
-
SUPER

Funzt endlich
Danke

-
Kann das vielleicht jemand im WinAPI FAQ ändern:
Wert-Funktionen
Werte erstellen:
C/C++ Code:
BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeicehrt wird";
RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(cString)+1);
C/C++ Code:
BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeicehrt wird";
RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(cString)+1);(BYTE ist als unsigned char definiert)
-
ich denke, jetzt ist noch eine kurze Erklärung fällig, warum der FAQ-Eintrag trotz deiner Probleme völlig korrekt ist:
das WinAPI ist eine reine C-Schnittstelle, und so ist es nicht ungewöhnlich, daß man WinAPI-Programme mit Hilfe eines C-Compilers schreibt (das Standard-Werk zur WinAPI-Programmierung von C.Petzold z.B. beschreibt die WinAPI-Programmierung mit C). Ein C-Compiler wiederum hat mit dem Code in den FAQ aber überhaupt keine Probleme, er wird anstandslos übersetzt! Also auch das von dir genannte Code-Stück:
BYTE cString[]="Hallo, das ist der eigentliche Wert, der unter dem Namen EintragsName gespeichert wird"; RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,strlen(cString)+1);ist, als C-Code betrachtet, fehlerlos! (BYTE* wird hier bei Aufruf der Funktion strlen implizit in char* "gewandelt", in C ist das kein Problem).
Wenn ein C++-Compiler eingesetzt wird, muß man aber (u.a.) auch noch auf die Typen achten, manche Umwandlungen sind hier implizit nicht möglich, auch nicht die von "unsigned char*"(BYTE*) nach "char*", deshalb meine Anmerkungen oben:
ein C++-Compiler wie der unter Dev-C++ aber sehr genau auf die Typen achtet
und
das "unsigned" macht den entscheidenden Unterschied.
(für einen C++-Compiler
)also zusammengefaßt: es kann durchaus Code in den FAQ stehen, der so einwandfrei nur mit einem C-Compiler läuft. Wird ein C++-Compiler eingesetzt, sind evtl. geringfügige Änderungen nötig.
Ich hoffe, ich konnte die Sache etwas aufklären...
MfG
-
Ok, danke für die Information

Und danke für die Hilfe
