![]() |
C++ header Datei umwandeln in Delphi unit (union)
Ich habe die Aufgabe eine .dll Datei in Delphi zu nutzen, welche in C++ geschrieben ist.
Hierzu muss ich die Header Datei in eine Delphi unit umwandeln. Grundsätzlich ist das erstmal kein Problem, jedoch ist in dieser Header Datei ein struct, mit dem ich einfach nicht klar komme. Vielleicht kann mir hier Jemand helfen ? Hier dass C++ struct
Code:
typedef struct tagMPA_CONFIG
{ ULONG structLen; union { struct { UCHAR FrameBufferSizeRx : 1; UCHAR NumFrameBuffersRx : 1; UCHAR BaudRate : 1; UCHAR ClockRate : 1; UCHAR ClockMode : 1; UCHAR InternalLoopback : 1; UCHAR RxClockSource : 1; UCHAR TxClockSource : 1; UCHAR TRXCOutput : 1; UCHAR Encoding : 1; UCHAR DPLLClockSource : 1; UCHAR DPLLMode : 1; UCHAR AutoRTSDeact : 1; UCHAR CRCPreset : 1; UCHAR IdleLineControl : 1; ULONG pad : (8*sizeof(ULONG) - 13); } bits; ULONG all; } set; ULONG FrameBufferSizeRx; ULONG NumFrameBuffersRx; ULONG BaudRate; ULONG ClockRate; ULONG ClockMode; BOOLEAN InternalLoopback; CLOCK_SOURCE RxClockSource; CLOCK_SOURCE TxClockSource; TRXC_OUTPUT TRXCOutput; ENCODING Encoding; DPLL_CLOCK_SOURCE DPLLClockSource; DPLL_MODE DPLLMode; BOOLEAN AutoRTSDeact; BOOLEAN CRCPreset; IDLE_LINE_CONTROL IdleLineControl; } MPA_CONFIG, *PMPA_CONFIG; |
Re: C++ header Datei umwandeln in Delphi unit (union)
Jag das doch duch den Header-converter vom jedi-projekt! Der sollte das hinkriegen.
|
Re: C++ header Datei umwandeln in Delphi unit (union)
Hab ich schon versucht, kommt nur müll raus !
|
Re: C++ header Datei umwandeln in Delphi unit (union)
Delphi-Quellcode:
Das Bitset lässt sich nicht direkt übersetzen.
type
PMpaConfig = ^TMpaConfig; PMPA_CONFIG = PMpaConfig; {$EXTERNALSYM PMPA_CONFIG} tagMPA_CONFIG = record structLen: ULONG; set_: record case Integer of 0: ( bits: record (* UCHAR FrameBufferSizeRx : 1; UCHAR NumFrameBuffersRx : 1; UCHAR BaudRate : 1; UCHAR ClockRate : 1; UCHAR ClockMode : 1; UCHAR InternalLoopback : 1; UCHAR RxClockSource : 1; UCHAR TxClockSource : 1; UCHAR TRXCOutput : 1; UCHAR Encoding : 1; UCHAR DPLLClockSource : 1; UCHAR DPLLMode : 1; UCHAR AutoRTSDeact : 1; UCHAR CRCPreset : 1; UCHAR IdleLineControl : 1; ULONG pad : (8*sizeof(ULONG) - 13); *) end); 1: ( all: ULONG); { end; } end; FrameBufferSizeRx: ULONG; NumFrameBuffersRx: ULONG; BaudRate : ULONG; ClockRate : ULONG; ClockMode : ULONG; InternalLoopback : BOOLEAN; RxClockSource : CLOCK_SOURCE; TxClockSource : CLOCK_SOURCE; TRXCOutput : TRXC_OUTPUT; Encoding : ENCODING; DPLLClockSource : DPLL_CLOCK_SOURCE; DPLLMode : DPLL_MODE; AutoRTSDeact : BOOLEAN; CRCPreset : BOOLEAN; IdleLineControl : IDLE_LINE_CONTROL; end; TMpaConfig = tagMPA_CONFIG; {$EXTERNALSYM tagMPA_CONFIG} MPA_CONFIG = tagMPA_CONFIG; {$EXTERNALSYM MPA_CONFIG} [edit] Das C-Bitset könnte man mit einem Delphi-set ersetzen (die Benutzung im Quellcode wäre nicht identisch; und pad ist damit schwer bis gar nicht abbildbar)
Delphi-Quellcode:
Allerdings weiss ich nicht, ob der Delphi-Compiler (habe kein Delphi installiert) mit set of () zurecht kommt - falls nicht, müsste man einen Typen dafür definieren...
bits: set of (
FrameBufferSizeRx, NumFrameBuffersRx, BaudRate, ClockRate, ClockMode, InternalLoopback, RxClockSource, TxClockSource, TRXCOutput, Encoding, DPLLClockSource, DPLLMode, AutoRTSDeact, CRCPreset, IdleLineControl) [/edit] Alignment könnte interessant werden... (packed) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 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 by Thomas Breitkreuz