![]() |
C -> Delphi: Struct im Struct, wie übersetzen?
Aloah zusammen!
Ich übersetze gerade ein Headerfile von C nach Delphi, und bin auf ein Konstrukt gestoßen, dass ich nicht so recht einzuordnen weiss. Die Übersetzung davon muss strukturell nachher das gleiche im Speicher ergeben denke ich, da dieses Struct an eine DLL weitergereicht wird. Ich glaub, die würde sonst allergisch reagieren :) Hier der Code
Code:
Was tut dies?
struct S7_SCAN_OBJECT
{ ord16 state; ord16 ack_state; ord16 event_state; ord32 event_id; ord16 no_add_value; struct { ord16 data_type; ord16 add_value_len; ord8 value[S7_MAX_SCAN_ADD_VALUE_LEN+2]; }add_value[S7_MAX_ADD_VALUES]; }; Vielen Dank schonmal im Voraus! Gruss, Fabian |
Re: C -> Delphi: Struct im Struct, wie übersetzen?
Zitat:
Du hast doch schong gesagt, dass es sich um ein Struct in einem Struct handelt. Ein Struct ist dabei ein Verbundtyp (record in Delphi). Hinter dem kommen noch eckige Klammern (also ein Array von diesem Verbundtyp). In Delphi kannst Du das einfach nachbilden, indem Du die Deklaration rausziehst:
Delphi-Quellcode:
Gruß Der Unwissende
type
ord16 = Word; // (oder was auch immer) ord32 = Cardinal; // (oder was auch immer) TAdd_Value = record data_type: ord16; .... end; TScanObject = record state: ord16; ... add_value: Array[0..S7_MAX_ADD_VALUES - 1] of TAdd_Value; end; |
Re: C -> Delphi: Struct im Struct, wie übersetzen?
Ah, okay. Danke dir 3 bis 4 mal! Ja, das leuchtet ein beim zweiten Blick darauf.
Ich muss im selben Kontext noch eine Sache nachfragen (ähnlich, daher keine neue Frage).
Code:
Das ist ein Funktionsaufruf an die DLL. Was mich hier fuchst, ist der Struct in der Parameterlist.
int32 S7_FAR_PASCAL s7_cycl_read(ord32 cp_descr,ord16 cref,ord16 orderid,
ord16 cycl_time,ord16 number, struct S7_READ_PARA S7_FAR_DATA *read_para_array); S7_FAR_PASCAL ist als Pascal Calling-Convention definiert, kann also wohl ausgelassen werden. S7_READ_PARA ist ein bereits definierted struct (record), S7_FAR_DATA ist als "far" definiert (imho kann das weggelassen werden). Warum aber steht das Wort "struct" da noch mit drin, wo der Typ des Parameters an sich ja bereits ein Struct ist? Wäre das richtig übersetzt?
Delphi-Quellcode:
(int32, ord16 und Konsorten sind klar, und definiert)
function S7_FAR_PASCAL(cp_descr: ord32;
cref: ord16; orderid: ord16; cycl_time: ord16; number: ord16; read_para_array: S7_READ_PARA): int32; |
Re: C -> Delphi: Struct im Struct, wie übersetzen?
Hat mit der C-Syntax zu tun.
"struct X" muss dort immer auch als "struct X" angegeben werden. Erst nach "typedef ... Y" kann man es nur als "Y" angeben, also z.B. "typedef struct X { ... } Y". In C++ kann man sich das sparen, da wird durch "struct X" auch der Typ "X" deklariert. |
Re: C -> Delphi: Struct im Struct, wie übersetzen?
Alles klar, dann nehme ich meine Übersetung als richtig an. Heissen Dank euch beiden nochmals! :dp:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr. |
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