Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Hilfe beim Übersetzen von C++ zu Delphi (https://www.delphipraxis.net/168578-hilfe-beim-uebersetzen-von-c-zu-delphi.html)

delphinub23 29. Mai 2012 14:35

Delphi-Version: 2010

Hilfe beim Übersetzen von C++ zu Delphi
 
Hallo DPler,

ich möchte diese C++ Struktur nach Delphi übersetzen:

C++:
Code:
typedef struct {
  PARTITION_STYLE PartitionStyle;
     union {
     CREATE_DISK_MBR Mbr;
     CREATE_DISK_GPT Gpt;
    };
  } CREATE_DISK, *PCREATE_DISK;
...meine Übersetzung nach Delphi:

Delphi-Quellcode:
  _CREATE_DISK = packed record
    PartitionsStyle: PARTITION_STYLE;
    Mbr: CREATE_DISK_MBR;
    Gpt: CREATE_DISK_GPT;
  end;
  CREATE_DISK = _CREATE_DISK;
  PCREATE_DISK = ^CREATE_DISK;
Das sollte doch so funktionieren, oder?! :(
Oder wie soll ich diese "union structure" sonst nach Delphi übersetzen?

Danke für jeden Tipp! :)

himitsu 29. Mai 2012 14:45

AW: Hilfe beim Übersetzen von C++ zu Delphi
 
Delphi-Quellcode:
  _CREATE_DISK = packed record
    PartitionsStyle: PARTITION_STYLE;
    case Integer of
      0: (Mbr: CREATE_DISK_MBR);
      1: (Gpt: CREATE_DISK_GPT);
  end;

  // oder

  _CREATE_DISK = packed record
    case PartitionsStyle: PARTITION_STYLE of
      0: (Mbr: CREATE_DISK_MBR);
      1: (Gpt: CREATE_DISK_GPT);
  end;
  // statt 0 und 1 besser die "korrekten" Werte einsetzen oder gar die passenden Konstanten ... für die Funktion isses aber unerheblich
Auf was du aber noch aufpassen mußt, ist die Speicher-/Feldausrichtung, also daß diese wirklich korrekt ist, denn von "packed" steht in dem C-Code nichts drin.

delphinub23 29. Mai 2012 14:54

AW: Hilfe beim Übersetzen von C++ zu Delphi
 
Hallo himitsu,

danke für dieses Beispiel.

Zitat:

denn von "packed" steht in dem C-Code nichts drin.
Wie würde denn im C-Code ein "packed" stehen?

himitsu 29. Mai 2012 15:41

AW: Hilfe beim Übersetzen von C++ zu Delphi
 
Sowas wie das "packed" selber hab ich noch nie gesehn,
aber das
Delphi-Quellcode:
{$A...}
, bzw.
Delphi-Quellcode:
{$ALIGN ...}
ist dort nicht immer so definiert, wie es in Delphi standardmäßig der Fall ist.

Und jenachdem von wo man den Code hat, gibt es in den C-Header entweder eine entsprechende Definition, bzw. dort existiert eine bestimmte "Vorgabe", in den übergeordneten Headern.


Auch die ENUMs stimmen nicht immer überein.
Delphi-Quellcode:
_PARTITION_STYLE = (
    PARTITION_STYLE_MBR,
    PARTITION_STYLE_GPT,
    PARTITION_STYLE_RAW);
z.B. in Delphi sind die standardmäßig so klein wie möglich (in diesem Fall 1 Byte)
und in C++ sind sie so wie die Register (für ein 32 Bit Programm dann 32 Bit = 4 Byte)

delphinub23 29. Mai 2012 15:48

AW: Hilfe beim Übersetzen von C++ zu Delphi
 
Danke himitsu! Du bist eine große Hilfe :)

himitsu 29. Mai 2012 15:57

AW: Hilfe beim Übersetzen von C++ zu Delphi
 
Vergess jedesmal wie das MINENUMSIZE lautet ... also hier nochmal in Kurz
Delphi-Quellcode:
type
  {$MINENUMSIZE 4}
  _PARTITION_STYLE = (
    PARTITION_STYLE_MBR,
    PARTITION_STYLE_GPT,
    PARTITION_STYLE_RAW);
  {$MINENUMSIZE 1}
oder im Notfall einfach so
Delphi-Quellcode:
type
  _PARTITION_STYLE = type Integer;
const
  PARTITION_STYLE_MBR = _PARTITION_STYLE(0);
  PARTITION_STYLE_GPT = _PARTITION_STYLE(1);
  PARTITION_STYLE_RAW = _PARTITION_STYLE(2);


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