AGB  ·  Datenschutz  ·  Impressum  







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

Records in D5 und D2007 unterschiedlich

Ein Thema von deadcantdance · begonnen am 28. Sep 2009 · letzter Beitrag vom 28. Sep 2009
Antwort Antwort
deadcantdance

Registriert seit: 25. Feb 2008
81 Beiträge
 
Delphi 2007 Professional
 
#1

Records in D5 und D2007 unterschiedlich

  Alt 28. Sep 2009, 14:22
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#2

Re: Records in D5 und D2007 unterschiedlich

  Alt 28. Sep 2009, 14:29
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]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
deadcantdance

Registriert seit: 25. Feb 2008
81 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Records in D5 und D2007 unterschiedlich

  Alt 28. Sep 2009, 22:06
Durch einiges Probieren habe ich nun nun die Lösung. Der Record sieht so aus:

Delphi-Quellcode:
tAbc = record
  ID : integer;
  Nummer : integer;
  Name : array[0..100] of char;
  Erstellt : tDateTime;
end;
Um diesen Record in Delphi 2007 kompatibel zu machen, ändert man den Record wie folgt:

Delphi-Quellcode:
tAbc = record
  ID : integer;
  Nummer : integer;
  Name : array[0..100] of AnsiChar;
  Erstellt : tDateTime;
end;
Wichtig ist außerdem die Compiler-Einstellung bzw. -direktive {Align 8}. Dann klappts auch wieder unter Delphi 2007.

Viele Grüße,
deadcantdance
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#4

Re: Records in D5 und D2007 unterschiedlich

  Alt 28. Sep 2009, 22:28
Zitat von deadcantdance:
Wichtig ist außerdem die Compiler-Einstellung bzw. -direktive {Align 8}. Dann klappts auch wieder unter Delphi 2007.
eventuell auch so ... hier wird $ALIGN ignoriert
Delphi-Quellcode:
tAbc = packed record
  ID : integer;
  Nummer : integer;
  Name : array[0..100] of AnsiChar;
  _dummy: array[101..105] of AnsiChar;
  Erstellt : tDateTime;
end;
Also in Zukunft einfach immer nur Fundamentale Typen verwenden und alles als PACKED.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:33 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