Probleme beim auslesen der registry



  • Hey ich habe anhand eines Beispielcodes versucht Werte aus einem Registry-Schlüssel auszulesen, aber leider wird mir immer nur das erste Zeichen in den Buffer geschrieben, woran könnte das liegen ?

    unsigned char temp[99];  
        unsigned long size = sizeof(temp);
    	HKEY hKey;
    
    	RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), &hKey);
        RegQueryValueEx(hKey, TEXT("ProductName"), NULL, NULL, temp, &size);
        RegCloseKey(hKey);
        printf("Value: %s (Size: %lu)\n", temp, size);
    


  • Bei mir ist der Output:

    Value: Windows 7 Professional (Size: 23)
    


  • Hey

    Ich habe nun mit hilfe eines Breakpoints überprüft, was in meinem Buffer steht.
    Das Ergebniss ist, dass ich nach jeden Zeichen eine Nulltreminierung bekomme 😕

    Das char Array ist bei mir also so gefüllt:
    [0]W
    [1]0
    [2]i
    [3]0
    [4]n
    [5]0
    [6]d
    [7]0
    ..
    ..

    Woran könnte das liegen?



  • Aha, scheinbar kann REG_SZ als Unicode ausgelesen werden? kA...
    Nutze halt die A-Versionen der Funktionen (RegOpenKeyA, RegQueryValueExA) oder übergib ein wchar_t array (und nutze wprintf).
    (Dein Projekt ist wohl auf Unicode eingestellt, deshalb werden die W-Funktionen aufgerufen)



  • Was hast Du den für eine IDE?


  • Mod

    -lowbyte- schrieb:

    Was hast Du den für eine IDE?

    Wieso spielt das eine Rolle?
    Man kann in allen IDEs zurück Unicode für ein Projekt einstellen und hat das oben genannte Verhalten...

    Einziger Unterschied: Alte IDEs haten als defualt MBCS... neue eben Unicode!



  • Martin Richter schrieb:

    -lowbyte- schrieb:

    Was hast Du den für eine IDE?

    Wieso spielt das eine Rolle?
    Man kann in allen IDEs zurück Unicode für ein Projekt einstellen und hat das oben genannte Verhalten...

    Einziger Unterschied: Alte IDEs haten als default MBCS... neue eben Unicode!

    Deswegen fragte ich...
    Denn wen er sich auskennen würde hätte er ja nicht danach gefragt, denke ich.


  • Mod

    -lowbyte- schrieb:

    Deswegen fragte ich...
    Denn wen er sich auskennen würde hätte er ja nicht danach gefragt, denke ich.

    Aber die Antwort hat er ja schon. 😉

    Und oft genug wird ja hier einfach nur gesagt: "Schalte Dein Projket auf MBCS und alles ist gut.!"
    Was ich eigentlich nicht für korrekt halte.

    Außer man baut wirklich solch einen Code in seine Anwendung und limitiert sie damit entsprechend:

    // Unicode only
    #if !defined(_UNICODE) && !defined(UNICODE)
    #error This project is suggested for UNICODE only!
    #endif
    

    Oder man schreibt nur in der A/W Form, der API Funktionen und verwendet explizit L"..." oder eben "...".

    (Just My 2 cents)



  • Martin Richter schrieb:

    Oder man schreibt nur in der A/W Form, der API Funktionen und verwendet explizit L"..." oder eben "...".

    Dies bevorzuge ich..



  • Danke euch 🙂


Anmelden zum Antworten