Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C-Structure in Delphi (https://www.delphipraxis.net/5556-c-structure-delphi.html)

Christian Seehase 13. Jun 2003 22:40

Moin jbg,

so isses.

jbg 13. Jun 2003 23:03

Da lag das aber nicht an der falschen Ausrichtung des Speichers für Records, sondern daran, dass für bool (= int = 4 Bytes) der Typ Boolean anstatt dem Typen LongBool verwendet wurde.

oki 16. Jun 2003 07:53

Hi Leute,

so wie es aussieht hat jbg recht. Der von Christian beschriebene Thread war auch von mir mit einem ähnlichen Problem wie jetzt. Auch dort wurde von den C-Leuten die ganze Zeit was von 8-Byte Ausrichtung gefaselt und wir haben es mit D5 auf normalem Wege hinbekommen.
Das Problem scheint hier wirklich in der Anordnung der einzelnen Elemente im Record und deren Ausrichtung sowie Länge zu liegen. Die Frage ist nur an welcher Stelle. Ich werde jbg ein zip-File mit den DLL's sowie den Daten auf Privatnachricht zusammenstellen. Da dort Lizenzrechte drauf sind die bezahlt werden müssen möchte ich es nicht so öffentlich machen. Sollte jemand sonst noch ernshaft testen wollen reicht eine kurze Info. Ich schicke das Zeug dann. Über unsere Erfolge und Mißerfolge halte ich in diesem Thread aber auf dem laufenden, damit er vollständig bleibt un jemandem mit ähnlichen Problemen ausreichen Infos zur Lösung bietet.
Ich gehe sowiso davon aus, das die Diskussion in diesem Thread erfolg und nicht über PN.

So, nun mal was zu euren Antworten.

Dank an Christian für den Zitat-Tip.

Hi jbg,
wenn durch die arrays 2 Byte bei packed verlorengehen und davon 3 vorhanden sind

nPrioritaet[7]
nGeschwindigkeit[7]
nVerbrauch[7]

warum gehen dann in der gesamten Struktur nur 2 Byte und nicht 6 Byte verloren?

Ich habe über CPU-Debuging festgestellt, dass bei der Angabe
Delphi-Quellcode:
   nPrioritaet : array[0..7] of short;
im Speicher alle Elemente von nPrioritaet innerhalb des Records hintereinander stehen und nicht über Zeiger an einer anderen Stelle. So müßte sich ein Packed doch eigentlich mit einer Kürzung der Länge der Struktur auf 7 * 2 auswirken. Das natürlich für jedes array. Die Frage ist zusätzlich noch, ob sich ein packed record gleichlautend auf die im Record befindlichen array's auswirkt oder diese bei globalem Compilerschalter $A nicht gepackt werden. Müßte mann hier dann folgendes schreiben um auch diese gepackt zu erhalten?
Delphi-Quellcode:
  TRW_Fahrzeug = packed Record
   .
   .
   nPrioritaet : packed array[0..7] of short;
Das jetzt nur mal zur Theorie. Ich hab schon verstanden, dass du packed nicht haben willst.

O.K., ich werd jetzt mal die DLL's und Daten zusammenschaufeln.

Gruß oki

oki 24. Jun 2003 08:11

Hi Leute und jbg.

Erst mal die gute Nachricht: es funzt. Das liegt daran, dass jbg sich Arbeit gemacht hat.

Laut jbg ist folgendes rausgekommen:
- mit ausgerichteten Record-Feldern (also unter D5 Align 4 Byte ohne packed Records) arbeiten;
- in den Procedure- und Funktionsaufrufen ohne const arbeiten;
- C Typ bool als boolean deklarieren;
- Funktionen und Methoden mit cdecl importieren.

Jetz stellt sich für mich folgende Frage:

Wir haben im Vorfeld mal festgestellt, dass der bool Typ unter Delphi Longbool deklariert werden muß.

Warum jetz Boolean.

Die nächste Frage wäre, warum wirkt sich pragma 8 bei Delphi 5 unter 4 Byte-Ausrichtung nicht negativ aus?

o.k. das zu den Fragen.

Gruß oki

jbg 24. Jun 2003 08:29

Zitat:

Zitat von oki
Warum jetz Boolean.

Das habe ich mich auch gefragt. Du kannst ja mal die Entwickler der DLLs fragen.


Zitat:

Die nächste Frage wäre, warum wirkt sich pragma 8 bei Delphi 5 unter 4 Byte-Ausrichtung nicht negativ aus?
Das ist einfach. Es werden keine 8 Byte großen Datentypen benutzt, die auch einen 4 Byte großen folgen. Und zwei 4 Byte große Datentypen werden bei Align 8 direkt hintereinander geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz