AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe beim Übersetzen von C++ zu Delphi

Ein Thema von delphinub23 · begonnen am 29. Mai 2012 · letzter Beitrag vom 29. Mai 2012
Antwort Antwort
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#1

Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 15:35
Delphi-Version: 2010
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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 15:45
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.
$2B or not $2B
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 15:54
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?

Geändert von delphinub23 (29. Mai 2012 um 15:58 Uhr) Grund: deutsche sprache, schwere sprache ^^
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 16:41
Sowas wie das "packed" selber hab ich noch nie gesehn,
aber das {$A...} , bzw. {$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)
$2B or not $2B

Geändert von himitsu (29. Mai 2012 um 16:44 Uhr)
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 16:48
Danke himitsu! Du bist eine große Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hilfe beim Übersetzen von C++ zu Delphi

  Alt 29. Mai 2012, 16:57
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);
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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