AGB  ·  Datenschutz  ·  Impressum  







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

Header in Delphi konvertieren

Ein Thema von Gargamel · begonnen am 2. Aug 2007 · letzter Beitrag vom 3. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

Header in Delphi konvertieren

  Alt 2. Aug 2007, 16:56
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
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 17:19
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 17:21
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 17:24
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 ]
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#5

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 17:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 18:52
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?
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#7

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 18:54
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
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#8

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 20:37
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 ?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 21:17
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.
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#10

Re: Header in Delphi konvertieren

  Alt 2. Aug 2007, 22:12
Vielen Dank.

Jetzt habe ich gerade noch ein Problem festgestellt:

const char * file;

Das habe ich ersetzt durch...

fileChar;

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:11 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