Einzelnen Beitrag anzeigen

Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#1

ClassType in ein Stream Speichern

  Alt 14. Jan 2008, 12:22
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
Gerhard
  Mit Zitat antworten Zitat