Hallo allerseits.
Ich versuche, in D3 eine Serie von Daten in TMemoryStreams zu speichern. U.a. auch Strings. Ich habe es zunächst so versucht:
Procedure WriteStr(Str:String; Mem:TMemoryStream);
var L:integer;
begin
L := Length(Str);
Mem.Write(L,SizeOf(Integer));
Mem.Write(Str,L);
end;
Procedure ReadStr(var Str:String; Mem:TMemoryStream);
var L:integer;
begin
Mem.Read(L,SizeOf(Integer));
Mem.Read(Str,L);
end;
Wenn man einmal WriteStr und später einmal ReadStr aufruft, klappt auch alles. Wenn man aber nochmal ReadStr aufruft, gibts ab der ersten String-Position im Stream Probleme. Wenn auch tausend andere Sachen in den Stream geschrieben werden und ich NUR WriteStr und ReadStr ausklammere, funktioniert alles.
Besonders häufig treten Probleme auf, wenn Strings unterschiedlicher Länge haben.
WARUM ??? Was mache ich falsch ?
Übrigends funktioniert es, wenn ich die chars des Strings EINZELN abspeichere:
Procedure WriteStr(Str:String; Mem:TMemoryStream);
var i,L:integer;
begin
L := Length(Str);
Mem.Write(L,SizeOf(Integer));
for i:=1 to L do Mem.Write(Str[i],SizeOf(Char));
end;
Procedure ReadStr(var Str:String; Mem:TMemoryStream);
var i,L:integer; c:Char;
begin
Mem.Read(L,SizeOf(Integer));
Str := ‚‘;
for i:=1 to L do begin
Mem.Read(c,SizeOf(Char));
str:=str+c;
end;
end;
Ich meine, man muß doch auch den String als Ganzes schreiben und lesen können.
Kann mir da jemand auf die Sprünge helfen ? Danke schonmal.
Jochen