AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ClassType in ein Stream Speichern

Offene Frage von "Geri"
Ein Thema von Geri · begonnen am 14. Jan 2008 · letzter Beitrag vom 16. Jan 2008
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz