Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C++ header Datei umwandeln in Delphi unit (union) (https://www.delphipraxis.net/41367-c-header-datei-umwandeln-delphi-unit-union.html)

chrisw 2. Mär 2005 14:44


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;

maximov 2. Mär 2005 14:56

Re: C++ header Datei umwandeln in Delphi unit (union)
 
Jag das doch duch den Header-converter vom jedi-projekt! Der sollte das hinkriegen.

chrisw 2. Mär 2005 14:57

Re: C++ header Datei umwandeln in Delphi unit (union)
 
Hab ich schon versucht, kommt nur müll raus !

NicoDE 2. Mär 2005 14:59

Re: C++ header Datei umwandeln in Delphi unit (union)
 
Delphi-Quellcode:
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}
Das Bitset lässt sich nicht direkt übersetzen.

[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:
bits: set of (
  FrameBufferSizeRx,
  NumFrameBuffersRx,
  BaudRate,
  ClockRate,
  ClockMode,
  InternalLoopback,
  RxClockSource,
  TxClockSource,
  TRXCOutput,
  Encoding,
  DPLLClockSource,
  DPLLMode,
  AutoRTSDeact,
  CRCPreset,
  IdleLineControl)
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...

[/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