![]() |
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:
Hier nehme ich an, das das ein record ist. Also
typedef enum {
wmpioerr_noerror, wmpioerr_invalidcall, wmpioerr_invalidfilename, wmpioerr_invalidfileext, wmpioerr_fileopenerror, wmpioerr_eofunexpected, wmpioerr_syntaxerror, wmpioerr_invalidformat, wmpioerr_invalidchunk, wmpioerr_unknown } wmpio_errors;
Delphi-Quellcode:
Was mich hier wundert ist, dass keine Datentypen angegeben werden.
wmpio_errors = record
... bla bla end; 2.
Delphi-Quellcode:
Wie schreibt man das in Delphi?
#define MDLTYP_UNDEF 0x0000
#define MDLTYP_SPRITE 0x0100 3.
Delphi-Quellcode:
Dieses "|"-Zeichen. War das ein ODER?
...
wmpioobj_start = 0x10 | wmpioobj_entity, ... 4. Und jetzt noch einige Datentypen ( und Zeiger )
Delphi-Quellcode:
Wo ist der Unterschied zwischen INT und CONST INT ?
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 Ich wäre Euch sehr dankbar, wenn Ihr mir sagen könnt, wie man diese Definitionen in Delphi schreibt. Vielen Dank |
Re: Header in Delphi konvertieren
fangen wir mal an:
1:
Delphi-Quellcode:
ist kein record, sondern ein enum type
typedef enum {
wmpioerr_noerror, wmpioerr_invalidcall, wmpioerr_invalidfilename, wmpioerr_invalidfileext, wmpioerr_fileopenerror, wmpioerr_eofunexpected, wmpioerr_syntaxerror, wmpioerr_invalidformat, wmpioerr_invalidchunk, wmpioerr_unknown } wmpio_errors; 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:
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 |
Re: Header in Delphi konvertieren
Code:
entspricht:
#define MDLTYP_UNDEF 0x0000
#define MDLTYP_SPRITE 0x0100
Delphi-Quellcode:
const
MDLTYP_UNDEF = $0000; // das $ Zeichen bedeutet: Hexadezimal, das entspricht dem 0x in C/C++ MDLTYP_SPRITE = $0100; |
Re: Header in Delphi konvertieren
also
![]() Das nutze ich immer wenn ich was Crosscompile Wenn da steht Define dann sind das in Delphi glaubig nur Constanten also
Delphi-Quellcode:
[arg shmia war schneller ;) ]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; |
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. |
Re: Header in Delphi konvertieren
Zitat:
procedure deineprocedure(var deinpointer: PDeinTyp); Zitat:
zu 4: was fehlt dir da noch?wurde doch alles gesagt oder nicht? |
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 |
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 ? |
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:
Das ist ein interessantes Sortiment von Variablendeklarationen.
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
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. |
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. |
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