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!