Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Von C nach Delphi


Jukka - So 17.09.06 00:15
Titel: Von C nach Delphi
Hoallo,

vorab ich weiß nicht ob das das richtige forum dafür ist.

Ichhabe hei ein par in c geschriebene funktionen und würde diese gerne in delphi nutzen. jedoch komm ich dort an grenzen, undwzwar schon bei den typen:


Quelltext
1:
2:
3:
4:
5:
6:
typedef struct {
  unsigned char *data;
  int len;
  int width;
  int height;
} SpriteImage;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
TSpriteImage = packed record
                  data : pointer;  // stringpointer gibt es soetwas?
                  len : Integer;
                  width : Integer;
                  height : Integer;
               end;


da gibt es viel soetwas könnte mir da jemand helfen?

Es handelt sich um funktionen zum auslesen von sprites ichhab die c und h datei mal angehängt, wäre echt super wenn da jemand helfen kann auch wenn es nur ansätze sind


Martok - So 17.09.06 00:36

Also, zu deinem Record:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
SpriteImage = record
  data:PChar;
  len,
  width,
  height:SmallInt;
end;


Zu den Typen:
unsigned char* ist ein Zeiger auf ein (vorzeichenloses) Zeichen. Damit kein Stringpointer, wie du es nanntest, sondern ein Zeichen-Pointer. So heißt er dann auch: PChar-Pointer to Char
int ist ein 16bit-Integer mit Vorzeichen (-32768..32767). Dieser heißt in Delphi Smallint. Der Integer ist ein 32Bit Datentyp(-2147483648..2147483647).

Um sowas übersetzen zu können, muss man unbedingt wissen, wie die Datentypen aufgebaut sind, und andersherum welcher Aufbau wie heißt.

Das Archiv guck ich mir nicht mehr an, bin zu müde^^

Martok


Delete - So 17.09.06 02:18

hallo juca,

der pointer auf zeichen wird in der tat als ^char oder als type pchar = ^char abgekürzt.

@martok, der integer ist in c genauso definiert wie in pascal, als generisches format das die arbeitspreite der CPU am besten wiedergibt, ist übrigens in fortran genauso... daher kannst du einen c int, nicht mit einen smallint in pascal gleichsetzen, sondern musst auf den jeweiligen C compiler achten, der je nach hersteller und version, den int unterschiedlich umsetzt. da hilft dir auch kein .h include weiter. dies nur so zur info.


Martok - So 17.09.06 10:47

Achso, wieder was gelernt.
Ich dachte int=16Bit und Longint=32Bit.