Schreiben/Lesen in Registry

Cromon

Erfahrenes Mitglied
Hallo zusammen!

Ich habe eine kurze Frage bezüglich des Schreibens in die Registry.

Ich möchte eine Zahl und ein char-Feld in die Registry schreiben. Die Zahl ist kein Problem, sie kommt problemlos in der Registry an. Allerdings habe ich ein kleines Problem, was das Char-Feld anbelangt. Es kommt keine Fehlermeldung, auch ist das neue Feld genau so in der Registry drin, wie es soll, allerdings ist der "Wert" völlig falsch. Die bekannten Quadrate (zwei an der Zahl), mehr nicht.

Hier mein Code:
Code:
char patha[]="c:\log";
RegSetValueEx(hkey, L"pfad",NULL,REG_SZ,(CONST BYTE*)patha,strlen(patha));

Wobei angemerkt werden kann, dass heky bereits definiert wurde.

So viel zum Schreiben, doch nun zum Lesen :)

Da happerts jetzt schon bei der Zahl... Ich zeige am besten einfach mal den Code, wie ich ihn bisher verwendet habe:

Code:
DWORD dw=1024;
DWORD dr;
RegQueryValueEx( hkey,L"checked",0L,&dr,(BYTE *)1024,&dw );

Da bekomme ich jetzt den Fehler der Speicherverletzung.

Ich hoffe, jemand hat ein paar Ansätze für mich :)

edit: Ich habe bereits diverse Sachen gelesen dazu, allerdings wurde da immer CString verwendet. Ich habe leider keinen Zugriff auf die MFC, daher scheidet das für mich ja aus, oder?

Gruss
Cromon
 
Zuletzt bearbeitet:
C++:
const char* ptr_path = "C:/log/";
RegSetValueExA(hkey, "pfad", NULL, REG_SZ, (CONST BYTE*)path, strlen(path));
ist einfach das Problem, dass du ANSI und UNICODE mischt. So sollte es gehen. (Davon mal abgesehen, dass du '\' durch '\\' oder '/' ersetzen musst/solltest.
 
Jo, dass das falsch ist, sieht man schon daran, dass du versucht ne Zahl in nen Zeiger zu casten!
C++:
(BYTE *)1024
... das kann nur falsch sein :D
C++:
DWORD value = 0;

// wert einlesen
{
    const DWORD size = sizeof(DWORD);
    RegQueryValueExA(hkey, "checked", 0, NULL, &value, &size);
}

// ausgeben des wertes
char temp[32];
sprintf(temp, "\"checked\" = %d", value);
MessageBoxA(NULL, temp, "Registry", MB_OK | MB_ICONINFORMATION);
 
Jup, ich habs auch gemerkt, hatte mal wieder den "Zuerst Gehirn einschalten, bevor man kopiert"-Grundsatz vergessen und aus Google kopiert :D

Hatte es im Verlaufe des Tages auch so hinbekommen, dass ich auch den Wert bei checked als SZ speichere und abrufe und beim Abrufen dann nach int scanne, klappt soweit ganz schön, aber deine Variante ist natürlich bisschen eleganter :D
 
Zurück