AGB  ·  Datenschutz  ·  Impressum  







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

C-Structure in Delphi

Ein Thema von oki · begonnen am 11. Jun 2003 · letzter Beitrag vom 24. Jun 2003
Antwort Antwort
Seite 3 von 3     123   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#21
  Alt 13. Jun 2003, 23:40
Moin jbg,

so isses.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#22
  Alt 14. Jun 2003, 00: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.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#23
  Alt 16. Jun 2003, 08: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
   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
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#24
  Alt 24. Jun 2003, 09: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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#25
  Alt 24. Jun 2003, 09:29
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 11:02 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