TRegistry: ReadBinaryData()
-
Servus, ich hab in meiner Registry einen REG_MULTI_SZ Key mit Daten drin.
Ich wollte die nun per ReadBinaryData() lesen (weil die binär sind), bekomme aber jedesmal eine Exception, "Invalid data type".
Außerdem würde ich dann gern wissen wie ich das binäre in etwas lesbares formatiere (es sind eigentlich nur Zeilen mit \n) Aber ReadString geht auch nicht
hoffe hier kann mir wer weiter helfen
-
Wie wär's, wenn du uns erstmal zeigst, wie der Code konkret aussieht, der die Exception auslöst?
-
So:
char GetRegistryValue(AnsiString KeyName, AnsiString data) { AnsiString S; char *buff; TRegistry *Registry = new TRegistry(KEY_READ); try { Registry->RootKey = HKEY_CURRENT_USER; Registry->OpenKey(KeyName,false); Registry->ReadBinaryData(data, &buff, sizeof(buff)); } __finally { delete Registry; } return *buff; }
-
Hallo,
vor allem muss "buff" ertsmal allociert werden.
Eine Möglichkeit wäre es so zu machen.TStringList* __fastcall ReadStringMultiSZ(AnsiString Value) { char* DataBuffer = NULL; int DataBufferSize; TStringList *HelpList; try { if(ValueExists(Value)) { HelpList = new TStringList(); DataBufferSize = GetDataSize(Value); DataBuffer = new char[DataBufferSize + 1]; ReadBinaryData(Value, DataBuffer, DataBufferSize); HelpList->Text = AnsiString(DataBuffer); } } __finally { if(DataBuffer) delete[] DataBuffer; return HelpList; } }
Gruß
Mikel