CString in die Registry



  • hi, habe folgendes problem:

    ich benutze diese funktion um den >>wert<< ind die >>zeichenfolge<< zu schreiben:

    Registry.WriteString("zeichenfolge", "wert");

    jetzt wollte ich meinem programm sagen, das es einen CString schreiben sollte, so:

    CString wert = "der wert";
    Registry.WriteString("test_string", wert);

    das hat er aber nicht gemacht, ist klar. aber gibt es da ne ähnliche funktion ??



  • Ehm, sehr präzise Problemschilderung... 😞
    Welche Para,meter erwartet WriteStrign denn???



  • sorry 🕶

    WriteString( const char *lpszValueName, LPVOID lpData, DWORD *pdwLastError )
    das dritte argument ist optional.



  • LPVOID? Hmm, so aus dem Stehgreif würd ich sagen:

    Registry.WriteString("test_string", static_cast<LPVOID>(&wert));
    

    😉



  • ich hab es gestet ...
    die idee ist mit sicherheit nicht schlecht. er hat auch die zeichenfolge und den wert erstellt. aber der wert ist nicht darstellbar. also es sieht so aus wie ein paar koreanische zeichen. weißt bestimmt was ich meine 😉



  • Die Idee ist, mit Verlaub, Mumpitz. Man kann nicht erwarten, dass lesbarer Text dabei rauskommt, wenn man einen Klassenzeiger auf void* castet.

    Ich würde vorschlagen:

    Registry.WriteString("test_string", static_cast<LPVOID>(const_cast<LPTSTR>(static_cast<LPCTSTR>(wert))));
    


  • lol ^^ die idee war zu midest besser als meine. bin ja auch nicht so der beste öhm

    aber danke für die antwort hat alles geklappt 😉



  • hilfe, was machst du da bloß mit den casts. ganz schlimm



  • hauptsache klapt 😉

    aber jetzt hab ich noch ne frage:
    wenn ich z.b. den pfad in der registry habe: "HKEY_LOCAL_MACHINE\SOFTWARE\test". gibt es da eine funktion, die den "ordner" -inhalt von diesem schlüssel überprüft ?? einmal müsste er dann alle schlüssel und alle zeichenfolgen rauskriegen.

    hoffe das kann man so verstehen



  • Original erstellt von MFK:
    *Die Idee ist, mit Verlaub, Mumpitz. Man kann nicht erwarten, dass lesbarer Text dabei rauskommt, wenn man einen Klassenzeiger auf void castet.
    **

    Ne, kann man auch nicht 😃 . Ausser die Funktion erwartet CString. Dann macht das LPVOID in den Parametern aber keinen Sinn... Du castest aber wie der letzte Holzfäller... 😉 Ich würde einen Wrapper vorschlagen...

    inline void WriteString(const char* str) {
      char* ptr = const_cast<char*>(str);
      Registry.WriteString(static_cast<void*>(ptr));
    }
    


  • Original erstellt von Red Skall:
    **hauptsache klapt 😉

    aber jetzt hab ich noch ne frage:
    wenn ich z.b. den pfad in der registry habe: "HKEY_LOCAL_MACHINE\SOFTWARE\test". gibt es da eine funktion, die den "ordner" -inhalt von diesem schlüssel überprüft ?? einmal müsste er dann alle schlüssel und alle zeichenfolgen rauskriegen.

    hoffe das kann man so verstehen**

    RegEnumKey macht das AFAIK
    Guck dir auch mal CRegKey aus den MFC an. Hab ich selber grade gefunden 😃


Anmelden zum Antworten