Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datenstruktur aus Delphi4 in Delphi7 übernehmen (https://www.delphipraxis.net/34476-datenstruktur-aus-delphi4-delphi7-uebernehmen.html)

Giantics 23. Nov 2004 17:15


Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Hallo Forum,

ich habe ein kleines Problem:
Eine Datenstruktur die unter Delphi4 angelegt ist, muss in Delphi 7 weiterverarbeitet werden.

Die Struktur ist aber nicht gleich groß, was beim Lesen und Schreiben logischerweiße zu Datenmüll führt.

Hab irgendwo mal gelesen, dass ab einer bestimmten Delphi-Version die Records anderst angelegt werden, damit man schneller darauf zugreifen kann ?!?!???. Und mit dem Schlüsselwort packed könne man dies umgehen.

Allerdings ist nun die Datenstruktur in Delphi7 mit packed kleiner und ohne packed größer als in Delphi4 und ich weiß nicht wirklich an was das liegt....

Vielleicht hat da einer von euch eine Idee.

Vielen Dank für euere Mühe!

------- Datenstruktur -------

Delphi-Quellcode:
type TAnrede = (Herr, Frau);

type TStunde = (packed) record
    Dummy: array[0..11] of char;
    Std: array[0..14] of Extended;
    Art: array[0..14] of Integer;
    Stoerung: Boolean;
  end;

type TDataStruct = (packed) record
    Nr: Integer;
    PersNr: Integer;
    Anrede: TAnrede;
    Geb: TDate;
    Name: string[50];
    VorName: string[50];
    Strasse: string[50];
    Ort: string[50];
    Job: string[50];
    Tel: string[20];
    Info1: string[50];
    Info2: string[50];
    Info3: string[50];
    Eintritt: TDate;
    Austritt: TDate;
    WochenStd: Extended;
    UeberstdMax: Extended;
    Urlaub: Extended;
    SonderUrlaub: Extended;
    UrlaubErhalten: Extended;
    UrlaubVorjahr: Extended;
    UrlaubRest: Extended;
    Stoerung: Extended;
    Stunden: array[1..1240] of TStunde;
    LKZ: boolean;
    Picture: TPicture;
  end;

SizeOf(TDataStruct) = 283.276 in Delphi4SizeOf(TDataStruct) = 288.288 in Delphi7 und mit packed 277.067

r_kerber 23. Nov 2004 17:24

Re: Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Moin Giantics,

könnte an den Integer's liegen, die könnten in D4 und D7 unterschiedlich groß sein! Mußt dann unter D7 Smallint verwenden!

jim_raynor 23. Nov 2004 17:28

Re: Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Integer waren schon bei Delphi4 32 Bit. Allerdings könnte es zum Beispiel an Extended, oder TDate oder auch an TAnrede liegen. Am besten du lässt dir mit einen einfachen Programm die Größe der einzelnen Datentypen ausgeben und dann wirst du schon sehen, wo da unterschiede sind.

Also einfach:

ShowMessage(IntToStr(SizeOf(TDate)));
ShowMessage(IntToStr(SizeOf(TAnrede)));
.
.
.

Giantics 23. Nov 2004 19:31

Re: Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Ich hab jetzt nochmal en bisschen rumprobiert und mir ist folgendes aufgefallen:

Wenn ich alle "Extended" und "TDate" durch "array[1..10] of char" ersetze, dann stimmt die Größe mit dem alten Delphi4 Wert überein, aber SizeOf(Extended) ist gleich SizeOf(TDate) ist gleich SizeOf(array[1..10] of char)!

Das will mir jetzt nicht wirklich einleuchten :gruebel:

mirage228 23. Nov 2004 19:34

Re: Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Gabs das nicht was mit der Ausrichtungsgröße von Records? :gruebel:

Der Compilerschalter {$ALIGNMENTSIZE <groesse>} oder so :?:

mfG
mirage228

Giantics 24. Nov 2004 16:34

Re: Datenstruktur aus Delphi4 in Delphi7 übernehmen
 
Zitat:

Zitat von mirage228
Gabs das nicht was mit der Ausrichtungsgröße von Records? :gruebel:

Der Compilerschalter {$ALIGNMENTSIZE <groesse>} oder so :?:

mfG
mirage228

Danke, habs mal mit $Align ausprobiert. Bringt aber leider auch nicht das gewünschte Ergebniss:

$A1: SizeOf(TDataStruct)=277 267 (wie packed)
$A2: SizeOf(TDataStruct)=278 310
$A4: SizeOf(TDataStruct)=283 292
$A8: SizeOf(TDataStruct)=288 288 (wie normal)

Delphi4: SizeOf(TDataStruct)=283 276

Eventuell muss ich es halt irgendwie mit array[1..10] of char umwandeln :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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