Instanzvariablen meinen auch normale Datentypen, nur da die regelmäßig nicht von TPersistent abgeleitet sind, muß für solche Typen Objektintern die Parameterspeicherung gesondert vereinbart werden. Aber grundsätzlich sind auch die speicherbar.
#Edit
Code: Alles auswählen
procedure TMyObject.SaveToStream(Strm: TStream);
begin
   if (Strm <> nil) then begin
     Strm.Write(FMyVar, SizeOf(FMyVar));
     Strm.Write(FMyNextVar, SizeOf(FMyNextVar));
  end;
end;
 
procedure TMyObject.ReadFromStream(Strm: TStream);
begin
   if (Strm <> nil) and (Strm.Size - Strm.Pos >= SizeOf(FMyVar) + SizeOf(FMyNextVar)) then begin
     Strm.Read(FMyVar, SizeOf(FMyVar);
     Strm.Read(FMyNextVar, SizeOf(FMyNextVar));
  end;
end;
Der Datentyp muß im Beispiel nicht angegeben werden, weil die jeweilige Variable einfach als Folge von Bytes gespeichert wird. Allerdings ist die Reihenfolge genau einzuhalten. Strings sind allerdings gesondert zu behandeln. Hier muß zunächst die Länge gespeichert werden und dann über eine Hilfsvariable einzulesen. Etwa so:
Code: Alles auswählen
procedure TMyObject.SaveToStream(Strm: TStream);
begin
   if (Strm <> nil) then begin
     Strm.Write(FMyVar, SizeOf(FMyVar));
     Strm.Write(FMyStr[0], SizeOf(integer));
     Strm.Write(FMyStr[1], length(FMyStr);
  end;
end;
 
procedure TMyObject.ReadFromStream(Strm: TStream);
var
  len: integer;
  str: string;
begin
   if (Strm <> nil) and (Strm.Size - Strm.Pos > 0) then begin
     Strm.Read(FMyVar, SizeOf(FMyVar));
     Strm.Read(len, SizeOf(len));
     SetLength(s, len);
     Strm.Read(s[1], len);
     FMyStr:= s;
     {auch erlaubt
        SetLength(FMyStr, len);
        Strm.Read(FMyStr[1], len));
     }
  end;
end;
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)