Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Struktur übersetzen von C nach Delphi (https://www.delphipraxis.net/150871-struktur-uebersetzen-von-c-nach-delphi.html)

Delphiuser1987 29. Apr 2010 09:24


Struktur übersetzen von C nach Delphi
 
Hallo zusammen, ich bin Anfänger und arbeite seit 2 Wochen mit Delphi.
Ich muss die unten stehende Struktur von C nach Delphi übersetzen.
Ich hoffe mir kann jemand helfen, denn ich schaffe es nicht.
Ich habe die Komentare auf der rechten Seite drin gelassen.

Code:
typedef struct DPS_TASK_PARAMETERtag {

unsigned char bPlcMode;                                   /* PLC mode */
unsigned short usWatchdogTime;                            /* Host watchdog time */
unsigned char abReserved1[3];                             /* Do not modify */
unsigned short usIdentNumber;                             /* PROFIBUS Ident number (if set to */
                                                           /* zero, built-in Ident number will */
                                                           /* be used) */
unsigned char bBusAddr;                                   /* Bus address */
unsigned char abReserved2[1];                             /* Do not modify */
unsigned char bFlags;                                     /* Configuration flags */
                                                           /* Bit 0: Chk_Cfg telegram data will */
                                                           /* be accepted as valid config. */
                                                           /* Bit 1: Ignore hardware address */
                                                           /* switch, use bBusAddr instead */
                                                           /* Bit 2: Hold last output data when */
                                                           /* entering safe state */
                                                           /* Bit 4: Swap data of word modules */
unsigned char bDpv1C1BufLen;                              /* Length of DPV1 class 1 buffer */
                                                           /* (including 4 bytes DPV1 header) */
unsigned char bDpv1C2BufLen;                              /* Length of DPV1 class 2 buffer */
                                                           /* (including 4 bytes DPV1 header) */
unsigned char bMiscUserFlags;                             /* Misc. flags for user */
unsigned char bMiscTaskFlags;                             /* Misc. flags for task */
unsigned char bBufferLen;                                 /* Length of PARA_DIAG_BUFFER */

union {
struct {
unsigned char bType;                                      /* Type of module */
unsigned char bLen;                                       /* Length of module */
} MODULE[24];
struct {
unsigned char abExtDiagData[32];                          /* Extended diagnostic data */
unsigned char abReserved3[16];
} DIAG_DATA;
} BUFFER;
} DPS_TASK_PARAMETER;
Einen Anfang habe ich schon gemacht, komm aber nicht mehr weiter sobald "union" kommt


Delphi-Quellcode:
Type

DPS_TASK_PARAMETERtag=record

bPlcMode      : byte;
usWatchdogTime : shortint;
abReserved1:array[1..3] of byte;
...
...
bBufferLen: byte

?????????????
????????????
wäre sehr dankbar für eine Hilfe

[edit=mkinzler]Quellcode-Tags eingefügt Mfg, mkinzler[/edit]

Trigger2003 29. Apr 2010 10:12

Re: Struktur übersetzen von C nach Delphi
 
Hallo,

such mal unter "variante Records" (nicht Delphi-Variants!), das sollte nach meinen sehr begrenzten C-Kenntnissen das Pendant zu unions sein...

[edit]
Übrigens: Ein unsigned short ist in Delphi ein "word", kein "shortint" (16Bit unsigned, nicht 8 signed).
[/edit]

Viel Erfolg

Tryer 29. Apr 2010 10:36

Re: Struktur übersetzen von C nach Delphi
 
Mangels C-Kenntnissen würde ich sowas vermuten:
Delphi-Quellcode:
DPS_TASK_PARAMETER = packed record
  case Byte of
  0:( //BUFFER
    MODULE: packed array [0..23] of
      packed record
        bType: Byte;
        bLen: Byte;
      end;
  );
  1:( //DIAG_DATA
    abExtDiagData: packed array[0..31] of Byte;
    abReserved3: packed array[0..15] of Byte;
  );
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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