hmm, dann müsst ich bzw. eher du den source bissl abändern.
woher weißt du wieviel Stings benötigt werden (also abgespeicher werden müssen). Mit <> nil gehts ja diesmal nicht.
So hier mal abgeänderter Source um alle 11 Strings abzuspeichern (ungetestet)
Delphi-Quellcode:
procedure LoadKnotFromStream(AStream: TStream; AKnot: PKnot);
var LChilds, LCount, LInt: Integer;
begin
for LCount := 1 to 11 do
begin
//Länge des Strings lesen
AStream.Read(LInt, SizeOf(LInt));
setlength(AKnot.A[LCount], LInt);
//String aus Stream lesen
AStream.Read(AKnot.A[LCount][1], LInt);
end;
AStream.Read(LChilds, SizeOf(LChilds));
for LCount := 1 to 11 do
begin
if LCount <= LChilds then
begin
//speicher für unterknoten anfordern
new(AKnot.S[LCount]);
LoadKnotFromStream(AStream, AKnot.S[LCount]);
end else
AKnot.S[LCount] := nil;
end;
end;
procedure SaveKnotToStream(AStream: TStream; AKnot: PKnot);
var LChilds, LCount, LInt: Integer;
begin
for LCount := 1 to 11 do
begin
//Länge des Strings ermitteln
LInt := Length(AKnot.A[LCount]);
//Länge des Strings speichern
AStream.Write(LInt, SizeOf(LInt));
//String speichern
AStream.Write(AKnot.A[LCount][1], LInt);
end;
//ermitteln wieviel Chidls
LChilds := 0;
while (LChilds < 11) and (AKnot.S[LChilds + 1] <> nil) do
inc(LChilds);
//Anzahl der Childs in Stream speichern
AStream.Write(LChilds, SizeOf(LChilds));
//Childs durchgehen
for LCount := 1 to LChilds do
SaveKnotToStream(AStream, AKnot.S[LChilds]);
end;