![]() |
Records in D5 und D2007 unterschiedlich
Hallo,
ich portiere gerade ein Anwendung von Delphi 5 nach Delphi 2007. In der Anwendung werden viele Records eingesetzt. Das Problem ist, dass ich mit Delphi 2007 die Records nicht mehr aus Dateien ausgelesen kann, es steht einfach Müll drin. Offensichtlich hat es damit zu tun, dass unpacked Records in Delphi 2007 wie packed Records behandelt werden. Vielleicht hat jemand einen Tipp für mich, wie ich auch mit Delphi 2007 kompatibel bleibe, da ich unmöglich > 500 Records anpassen kann. Viele Grüße, deadcantdance |
Re: Records in D5 und D2007 unterschiedlich
Schau mal, ob sich mit {$A...} bzw. {$ALIGN ...} etwas machen läßt
siehe [oh]$A[/oh] [oh]$ALIGN[/oh] Aber genau das ist ein Grund, warum man von Anfang an "externe" Records NIE unpacked sein lassen sollte oder anderswie (z.B. via der Compilerschalter) für einen definierten Zustand sorgt. [edit=mkinzler]Refresh, da Cache-zerstören nichts gebracht hat Mfg, mkinzler[/edit] |
Re: Records in D5 und D2007 unterschiedlich
Durch einiges Probieren habe ich nun nun die Lösung. Der Record sieht so aus:
Delphi-Quellcode:
Um diesen Record in Delphi 2007 kompatibel zu machen, ändert man den Record wie folgt:
tAbc = record
ID : integer; Nummer : integer; Name : array[0..100] of char; Erstellt : tDateTime; end;
Delphi-Quellcode:
Wichtig ist außerdem die Compiler-Einstellung bzw. -direktive {Align 8}. Dann klappts auch wieder unter Delphi 2007.
tAbc = record
ID : integer; Nummer : integer; Name : array[0..100] of AnsiChar; Erstellt : tDateTime; end; Viele Grüße, deadcantdance |
Re: Records in D5 und D2007 unterschiedlich
Zitat:
Delphi-Quellcode:
Also in Zukunft einfach immer nur Fundamentale Typen verwenden und alles als PACKED.
tAbc = packed record
ID : integer; Nummer : integer; Name : array[0..100] of AnsiChar; _dummy: array[101..105] of AnsiChar; Erstellt : tDateTime; end; Generische Typen wie Integer, Cardinal, Char und String könne sich ja schnell mal ändern. Auch Array of Record sollte man als PACKED deklarieren, da dort ebenfalls ausgerichtet werden könnte. PS: zu Denken ein Char wäre für alles ab Delphi 2009 ein WideChar und davor ein AnsiChar, ist nicht so optimal, da ja irgendwann die native Unterstützung von UCS4 kommt :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz