AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Uralt-Freepascal Programm nach Delphi portieren

Ein Thema von DualCoreCpu · begonnen am 12. Nov 2019 · letzter Beitrag vom 13. Nov 2019
Antwort Antwort
DualCoreCpu
(Gast)

n/a Beiträge
 
#1

Uralt-Freepascal Programm nach Delphi portieren

  Alt 12. Nov 2019, 18:14
Delphi-Version: 5
Delphi-Quellcode:

TYPE
   PStreamRec = ^TStreamRec; { Stream record ptr }
   TStreamRec = Packed RECORD
      ObjType: Sw_Word; { Object type id }
      VmtLink: Pointer; { VMT link }
      Load : Pointer; { Object load code }
      Store: Pointer; { Object store code }
      Next : PStreamRec; { Next stream record }
   END;
Im Quellcode hatte man dann typisierte Konstanten definiert, die es möglich gemacht haben, die einzelnen Streams für die spätere Verwendung zu registrieren, was bei diesem Streamtyp zwingend erforderlich war, damit die Objekte später in den Stream geschrieben werden konnten.

Delphi-Quellcode:
CONST
   RCollection: TStreamRec = (
     ObjType: 50;
     VmtLink: Ofs(TypeOf(TCollection)^);
     Load: @TCollection.Load;
     Store: @TCollection.Store;
     Next: Nil);
Nun funktionieren ja die Streamklassen von heute doch etwas anders und nirgendwo ist da so eine Registirierung nötig, wie das damals noch der Fall war.

Wie kann ich nun mit geringstmöglichem Aufwand diese Streams anpassen?

Delphi scheint die Funktion TypeOf nicht zu kennen und die Funktion Ofs gibt es wegen des heutigen Flat Speichermodells auch nicht mehr.

Ich würde am liebsten doch erst mal die Zuweisung an die Felder des TStreamRec ausführen, damit ich nicht die Streamlogik komplett umkrempeln muss. Ich beuntze die alte Objects Unit aus Freepascal Version 3.0.0. Gibt es da eine Chance?
Wie kriege ich da die TStreamRec Werte korrekt belegt. Die Zuweisung an VmtLink ist so, wie oben zu sehen, in Delphi nicht mehr gültig;
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
215 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Uralt-Freepascal Programm nach Delphi portieren

  Alt 13. Nov 2019, 08:08
Versuche mal VmtLink: @(TypeOf(TCollection)^); !

Sollte das nicht klappen, bleibt wohl nur die Umstellung auf den heutigen Delphi Stream. Würde ich allerdings unabhängig davon eh machen, auch wenn das zunächst mach Mehrarbeit aussieht.

[OT]
Ich habe früher auch mit Turbo Pascal programmiert. So wie ich die nötige Streamregistrierung damals verstanden habe, frage ich mich, wie Delphi seine Streams registriert. Macht das da der Compiler automatisch oder ist hier wegen Laufzeittypinfo kein Registrierung in diesem Sinne nötig?

Das wäre, wenn DOS nicht schon so lange her wäre, mal einen Strang wert, wo über dieses Problem diskutiert wird.
[/OT]
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
882 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Uralt-Freepascal Programm nach Delphi portieren

  Alt 13. Nov 2019, 09:39
Ich befürchte das kannst Du vergessen. Die notwendigen Mechanismen, die damals mit Turbo-Pascal (und Turbo Vision) eingeführt (und von anderen Pascal-Dialekten kopiert) wurden, sind in Delphi schlicht nicht mehr vorhanden.

Es bleibt Dir nur, den Aufbau der Streams zu analysieren und eigenen Code zum Lesen der Objekt-Properties zu schreiben.
Thomas Mueller
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
877 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Uralt-Freepascal Programm nach Delphi portieren

  Alt 13. Nov 2019, 09:40
Versuche es mal mit
Delphi-Quellcode:
initialization
  System.Classes.RegisterClass(TStreamRec);
Hintergrund siehe OH. Ob du allerdings aus dem Record explizit eine Klasse
machen musst, weiß ich leider nicht. Einfach probieren.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 07:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf