Registry: REG_MULTI_SZ schreiben



  • Hallo,

    ich habe Probleme den oben genannten Typ zu schreiben. Aus den FAQ und MSDN weiß ich, dass 2 Nullzeichen am Ende stehen müssen, aber es klappt trotzdem nicht:

    RegSetValueEx(*offen, "Eintragsname", NULL, REG_MULTI_SZ,
                                 ansistring->Text.c_str(), strlen(ansistring->Text.c_str())+1); //size+1 wegen zusätzlichem Nullzeichen
    

    Ich habe auch versucht, bevor ich den Wert schreibe, manuell noch ein \0 anzuhängen, aber das wird dann einfach ignoriert. Der Registry-Eintrag endet immer mit "00 00 00"(=Hex) und nicht wie er sollte mit "00 00 00 00".

    Danke!
    Inq.



  • Wenn du zwei Nullzeichen am Ende haben willst, solltest du +2 verwenden. Ich glaube aber nicht, dass c_str() dir den Gefallen tun wird, den String doppelt zu terminieren.



  • Ja, Du hast recht: wenn ich +2 verwende, schreibt die Funktion zusätzlich noch irgendeinen Hyroglyphen in den Eintrag, aber leider keine 00



  • Äh ja, da du ja nicht die VCL Klasse TRegistry verwendest sondern offensichtlich WinAPI, werde ich dich mal da hin schubsen.

    ->Verschoben.



  • @junix
    Tut mir leid, wegen dem falschem Forum!

    Hab´s jetzt folgendermaßen hinbekommen:

    AnsiString set = Eintrag->Text + '\0';
    RegSetValueEx(*offen, "Eintrag", NULL, REG_MULTI_SZ,
                                 set.c_str(), set.Length()+1);
    

    AnsiString::Length() zählt das manuell angefügte \0 mit, strlen() nicht!


Anmelden zum Antworten