Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Umsetzung C-Struct in Delphi Records
mb_wt - Mo 22.09.03 14:12
Titel: Umsetzung C-Struct in Delphi Records
Hallo,
ich habe eine DLL-Datei mit Functionen die ich ansprechen möchte.
Zu dieser DLL eine Header-Datei um die Functionen unter C++ anzusprechen.
Wie kann ich nun die Functionen unter Delphi ansprechen.
Den Functionen in der DLL-Datei werden Pointer auf Struct´s übergeben.
z.B.:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| struct REFERENCE { unsigned char board_select; unsigned char access; };
struct dpn_interface { struct REFERENCE reference; unsigned char stat_nr; unsigned char length; unsigned short int error_code; unsigned char slv_state; unsigned char sys_state; unsigned char sys_event; unsigned char user_data [MAX_DATA_LEN]; }; |
Kann ich diese struct in eine Delphi Record umsetzen??
Wenn ja wie??
Gruß
Moderiert von
Klabautermann: Code-Tags hinzugefügt.
Klabautermann - Mo 22.09.03 15:45
Hallo,
ich versuche es mal, übernehme aber keine Garantie ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| REFERENCE = packed record board_select : Char; access : Char; end;
dpn_interface = packed Record reference : REFERENCE; stat_nr : Char; length : Char; error_code : Byte; slv_state : Char; sys_state : Char; sys_event : Char; user_data ARRAY[MAX_DATA_LEN] OF Char; end; |
Gruß
Klabautermann
UC-Chewie - Mo 22.09.03 16:48
Short Int ist ein 2 Byte-Integer, da unsigned ist es Word. Oder nicht?
Motzi - Mo 22.09.03 17:22
unsigned char ist ein Byte und unsigned short ist ein Word...
die Übersetzung muss also so ausschaun:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| REFERENCE = packed record board_select : Byte; access : Byte; end;
dpn_interface = packed Record reference : REFERENCE; stat_nr : Byte; length : Byte; error_code : Word; slv_state : Byte; sys_state : Byte; sys_event : Byte; user_data ARRAY [0..MAX_DATA_LEN - 1] or Byte; end; |
Klabautermann - Mo 22.09.03 19:39
Hi,
| UC-Chewie hat folgendes geschrieben: |
| Short Int ist ein 2 Byte-Integer, da unsigned ist es Word. Oder nicht? |
wenn es zwei Byte sind dann auf jedenfall Word;
| Motzi hat folgendes geschrieben: |
| unsigned char ist ein Byte |
Byte und Char sind Äquivalent. Beide genau ein Byte Land und beide unsigned. Das eine Wird nur standartmäßig als Buchstabe und das ander als Zahl interpretiert.
Gruß
Klabautermann
AndyB - Mo 22.09.03 19:56
Seit ihr euch da ganz sicher, dass es sich um einen packed record handelt? Ich sehe im Ausgangscode keine Anweisung die das impliziet aussagt. Des weiteren kann auch nicht die Standardeinstellung eines bestimmten Compiler verwendet werden, da mb_wt den Compilernamen auch nicht genannt hat.
Motzi - Di 23.09.03 10:38
Solche records sind in den meisten Fällen "packed", aber selbst wenn nicht wäre es auch egal, da die Felder des Records so angeordnet sind, dass sie alle an entsprechenden Speichergrenzen ausgerichtet sind, womit kein Unterschied mehr entsteht ob der Record nun "packed" ist oder nicht...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!