Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Header in Delphi konvertieren (https://www.delphipraxis.net/96982-header-delphi-konvertieren.html)

Gargamel 2. Aug 2007 15:56


Header in Delphi konvertieren
 
Hi

Ich MUSS ( von Wollen kann keine Rede sein ) eine Header-Datei so umschreiben, dass ich diese in Delphi nutzen kann.
Da ich aber von C keine Ahnung habe, ergeben sich damit Probleme.

Ich will Euch nicht mit der ganzen h-Datei langweilen, sondern zeige Euch nur einige wenige Zeilen, von denen ich def. nicht weiss, wie ich diese umsetzen soll.

Fangen wir an:

1.

Delphi-Quellcode:
typedef enum {
   wmpioerr_noerror,
   wmpioerr_invalidcall,
   wmpioerr_invalidfilename,
   wmpioerr_invalidfileext,
   wmpioerr_fileopenerror,
   wmpioerr_eofunexpected,
   wmpioerr_syntaxerror,
   wmpioerr_invalidformat,
   wmpioerr_invalidchunk,
   wmpioerr_unknown

} wmpio_errors;
Hier nehme ich an, das das ein record ist. Also

Delphi-Quellcode:
wmpio_errors = record
 ... bla bla
end;
Was mich hier wundert ist, dass keine Datentypen angegeben werden.



2.

Delphi-Quellcode:
#define MDLTYP_UNDEF      0x0000
#define MDLTYP_SPRITE      0x0100
Wie schreibt man das in Delphi?



3.
Delphi-Quellcode:
...
wmpioobj_start   = 0x10 | wmpioobj_entity,
...
Dieses "|"-Zeichen. War das ein ODER?



4.

Und jetzt noch einige Datentypen ( und Zeiger )
Delphi-Quellcode:
int     * pts_list;
const unsigned char * palette;
const char * name;
const char ** wads_list;
double * ambient;
const int   * fog1;
wmpio_uvw * uv_list; // wmpio_uvw ist ein struct ( record )
double skills[20]; // ich nehme an, das das ein Array ist
Wo ist der Unterschied zwischen INT und CONST INT ?


Ich wäre Euch sehr dankbar, wenn Ihr mir sagen könnt, wie man diese Definitionen in Delphi schreibt.


Vielen Dank

semo 2. Aug 2007 16:19

Re: Header in Delphi konvertieren
 
fangen wir mal an:

1:

Delphi-Quellcode:
typedef enum {
   wmpioerr_noerror,
   wmpioerr_invalidcall,
   wmpioerr_invalidfilename,
   wmpioerr_invalidfileext,
   wmpioerr_fileopenerror,
   wmpioerr_eofunexpected,
   wmpioerr_syntaxerror,
   wmpioerr_invalidformat,
   wmpioerr_invalidchunk,
   wmpioerr_unknown

} wmpio_errors;
ist kein record, sondern ein enum type
also:
Delphi-Quellcode:
type
TWmpio_errors = (
   wmpioerr_noerror,
   wmpioerr_invalidcall,
   wmpioerr_invalidfilename,
   wmpioerr_invalidfileext,
   wmpioerr_fileopenerror,
   wmpioerr_eofunexpected,
   wmpioerr_syntaxerror,
   wmpioerr_invalidformat,
   wmpioerr_invalidchunk,
   wmpioerr_unknown
);


2:
Zitat:

#define MDLTYP_UNDEF 0x0000
#define MDLTYP_SPRITE 0x0100
-->
const
MDLTYP_UNDEF = $0000;
MDLTYP_SPRITE = $0100;

3: ja

4:
Wo ist der Unterschied zwischen INT und CONST INT ?

--> Konstanten sind nicht änderbar, also statische Werte

shmia 2. Aug 2007 16:21

Re: Header in Delphi konvertieren
 
Code:
#define MDLTYP_UNDEF     0x0000 
#define MDLTYP_SPRITE     0x0100
entspricht:
Delphi-Quellcode:
const
  MDLTYP_UNDEF =    $0000; // das $ Zeichen bedeutet: Hexadezimal, das entspricht dem 0x in C/C++
  MDLTYP_SPRITE =   $0100;

Corpsman 2. Aug 2007 16:24

Re: Header in Delphi konvertieren
 
also Hier sthet sehr viel zu C

Das nutze ich immer wenn ich was Crosscompile

Wenn da steht Define dann sind das in Delphi glaubig nur Constanten

also
Delphi-Quellcode:

Const

MDLTYP_UNDEF    = 0;
MDLTYP_SPRITE   = 256 ; // könnte aber auch 4 sein, ich bin mir grad net sicher wie das genau ist.
                          // 0x0100 müste aber eine Hex Zahl sein und deswegen 256


..
C:
wmpioobj_start  = 0x10 | wmpioobj_entity
delphi:
wmpioobj_start  := 16 or wmpioobj_entity;
[arg shmia war schneller ;) ]

Gargamel 2. Aug 2007 16:26

Re: Header in Delphi konvertieren
 
Noch ein Wort zu Punkt 1:

Ich muss also noch bei var schreiben:

var Wmpio_errors:TWmpio_errors;

Soweit richtig?

Das mit typedef enum ist mir jetzt klar.

typedef struct ist aber ein record, oder?

Jetzt fehlt nur noch Punkt 4.

semo 2. Aug 2007 17:52

Re: Header in Delphi konvertieren
 
Zitat:

Noch ein Wort zu Punkt 1:
Ich muss also noch bei var schreiben:
var Wmpio_errors:TWmpio_errors;
Soweit richtig?
du hast einen var parameter der ein pointer darstellt zu übergeben, also:
procedure deineprocedure(var deinpointer: PDeinTyp);


Zitat:

typedef struct ist aber ein record, oder?
japp

zu 4: was fehlt dir da noch?wurde doch alles gesagt oder nicht?

Gargamel 2. Aug 2007 17:54

Re: Header in Delphi konvertieren
 
Bei Punkt 4 sind noch einige wenige Zeilen, bei denen ich nicht weiss, wie ich die in Delphi schreiben soll.

Hier nochmal:

Delphi-Quellcode:
int    * pts_list;
const unsigned char * palette;
const char * name;
const char ** wads_list;
double * ambient;
const int  * fog1;
wmpio_uvw * uv_list; // wmpio_uvw ist ein struct ( record )
double skills[20]; // ich nehme an, das das ein Array ist

Gargamel 2. Aug 2007 19:37

Re: Header in Delphi konvertieren
 
Im Moment stolpere ich über:

const char ** wads_list;
double skills[20];


Kann es sein, dass double skills[20] so geschrieben wird?

skills:array[0..19] of double ?

Robert Marquardt 2. Aug 2007 20:17

Re: Header in Delphi konvertieren
 
Es gibt einen wichtigen Unterschied bei den Enums. In C ist Wmpio_errors immer 4 Bytes lang. In Delphi erst mal nur 1 Byte. Ein {$MINENUMSIZE 4} vor der Deklaration in Delphi behebt das Problem.

Code:
int    * pts_list;
const unsigned char * palette;
const char * name;
const char ** wads_list;
double * ambient;
const int  * fog1;
wmpio_uvw * uv_list; // wmpio_uvw ist ein struct ( record )
double skills[20]; // ich nehme an, das das ein Array ist
Das ist ein interessantes Sortiment von Variablendeklarationen.
Delphi-Quellcode:
var
  pts_list: PInteger; // hier wird affensichtlich ein dynamisch alloziiertes Array von Integern abgelegt
  palette: PChar; // das const besagt in C das die Elemente auf die dr Pointer zeigt nicht veraendert werden duerfen. Der Pointer aber schon.
  name: PChar;
  wads_list: PPChar; // mit "PPChar = ^PChar,". Basis fuer ein dynamisch alloziiertes Array of C strings bei dem die Chars nicht veraendert werden koennen, aber sowohl die PChars als auch wads_list schon.
  ambient: PDouble; // hier wird affensichtlich ein dynamisch alloziiertes Array von Doubles abgelegt
  fog1; // das ksann man wohl jetzt selbst verstehen
  uv_list: Pwmpio_uvw; // mit "Pwmpio_uvw = ^wmpio_uvw;"
  skills: array [0..19] of Double; // ich nehme an, das das ein Array ist. Genau.

Gargamel 2. Aug 2007 21:12

Re: Header in Delphi konvertieren
 
Vielen Dank.

Jetzt habe ich gerade noch ein Problem festgestellt:

const char * file;

Das habe ich ersetzt durch...

file:PChar;

Delphi scheint aber das Wort file reserviert zu haben. So wie es aussieht, muss ich aber file verwenden, da die Datenstruktur 1:1 umgesetzt werden muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz