Hallo zusammen
Ich möchte verschiedene Objekte in ein Stream speichern. Zu diesem Zweck schreibe ich den Klassenstyp als Zusatzinformation in den Stream. Beim Auslesen wird der Klassentyp in einer case ermittelt und die enstpechenden Load-Routine aufgerufen. Das Ganze sieht als Beispiel ungefähr so aus:
Delphi-Quellcode:
Procedure TPoint.Store(s:TStream);
var ct:TClass;
Begin
ct:=self.ClassType;
s.write(ct,sizeo(ct));
s.write(P1,SizeOf(P1));
End;
// eine abgeleitete von TPont Klasse
Procedure TLine.Store(s:TStream);
var ct:TClass;
Begin
inherited store(s);
s.write(P2,sizeof(P2);
End;
//.. und dann dazu noch die Load-Routinen als Konstruktoren
Constructor TPoint.load(s);
Begin
inherited create();
s.read(P1,sizeof(P1));
end;
Constructor TLine.load(s);
Begin
inherited Load(s);
s.read(P2,sizeof(P2));
end;
// lade eine Objektliste aus einem Stream
Procedure Form1.LoadFromFile(Filename:String);
var ct:TClass;
Point:TPoint
Begin
Stream:=TStream.Create(FileName,....);
Stream.Read(ct,Sizeof(Ct));
if ct = TPoint then ObjectList.Add(TPoint.Load(Stream)) else
if ct = TLine then ObjectList.Add(TLine.Load(Stream)) else
memo1.lines.add('unknown object');
End;
Das Laden und Speichern von verschiedenen Objekten in ein File funktioniert sporadisch. Das Problem liegt bei der Ermittlung des Klassentyps. Wenn ich in Loadfromfile auf die Zeilte "if ct=TPoint" einen Breakpoint setze dann erkennt Delphi manchmal die Klasse und zweigt sie im ToolTip als Text, manchmal steht im ToolTip nur ein Hexwert drin.
Nun meine Fragen:
1.) Kann es sein, dass sich die ID für den Klassentyp laufende ändert?
2.) Andert sich der Klassentyp vielleicht nur nach einer Codemodifikation und erneutem Compilieren?
Vielen Dank für Eure Infos
Geri