Hallo!
Musst du nicht unbedingt, es gibt ja analog zu SaveToStream die Methode LoadFromStream. Du musst nur vorher den Stream an die richtige Stelle schieben (in diesem Falle wohl der Anfang, also Str.Position:=0).
Allgemein ergibt sich jedoch die Problematik, daß LoadFromStream den gesamten Streaminhalt ab der aktuellen Position einlesen will, sodaß du dort noch gesondert vorgehen musst, wenn du nach dem Memodaten noch andere Sachen wie Integerwerte oder Strings ablegen willst. Ich speichere zum Beispiel in einigen Programmen Stringlisten, indem ich zuerst die Anzahl Zeilen in den Stream schreibe und dann die einzelnen Zeilen.
Dabei wird für jede Zeile wiederum die Anzahl Zeichen gespeichert, anschliessend dann die Zeichen selber. Und genau dort kommt dann diese PChar-Verwendung ins Spiel (im Code hier ist´s einfach Pointer).
Delphi-Quellcode:
procedure SaveStrToStream(const Stream: TStream; const Value: String);
var Len: Word;
begin
Len := Length(Value);
Stream.WriteBuffer(Len, SizeOf(Len));
if Len > 0 then
Stream.WriteBuffer(Pointer(Value)^, Len);
end;
procedure LoadStrFromStream(const Stream: TStream; var Str: String);
var Len: Word;
begin
Stream.ReadBuffer(Len, SizeOf(Len));
SetLength(Str, Len);
if Len > 0 then
Stream.ReadBuffer(Pointer(Str)^, Len);
end;
Cu,
Udontknow