AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++ Struct übersetzen zu Delphi record
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Struct übersetzen zu Delphi record

Ein Thema von Lenny15 · begonnen am 7. Feb 2007 · letzter Beitrag vom 7. Feb 2007
Antwort Antwort
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#1

C++ Struct übersetzen zu Delphi record

  Alt 7. Feb 2007, 16:11
Ich habe folgende Struktur in C++:

Code:
typedef struct cl_enginefuncs_s
{
   // sprite handlers
   HSPRITE                  ( *pfnSPR_Load )         ( const char *szPicName );
   int                  ( *pfnSPR_Frames )         ( HSPRITE hPic );
   int                  ( *pfnSPR_Height )         ( HSPRITE hPic, int frame );
   int                  ( *pfnSPR_Width )         ( HSPRITE hPic, int frame );
   void                  ( *pfnSPR_Set )            ( HSPRITE hPic, int r, int g, int b);
...
...
} cl_enginefunc_t;
Diese Struktur möchte ich gerne in Delphi übersetzen.
HSPRITE ist übrigens nur ein gewöhnlicher Integer;
Folgender ist mein Ansatz:

Delphi-Quellcode:
cl_enginefuncs_s = ^cl_enginefuncs_t;
  cl_enginefuncs_t = packed record
    pfnSprLoad : function(const szPicName: Pchar): Integer;
    pfnSPR_Frames : function(hpic: Integer);
    ...
    ...
  end;
Stimmt das denn so? Sind das Delphi-Intern jetz auch Funktionszeiger? Oder wie müsste ich das deklarieren? Oder habe ich das ganz falsch verstanden?

Danke schonmal im vorraus.

Grüße,
Lenny
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: C++ Struct übersetzen zu Delphi record

  Alt 7. Feb 2007, 16:31
Hi,
sieht eigentlich soweit ganz gut aus. Allerdings würde ich an deiner Stelle für HSPRITE einen Aliastypen in Delphi schaffen. Damit kannst Du einfacher auf Änderungen reagieren (z.B. auch leichter Fehler korrigieren).

Also einfach:
Delphi-Quellcode:
type
  HSPRITE = Integer;

  cl_enginefuncs_s = ^cl_enginefuncs_t;
  cl_enginefuncs_t = packed record
    pfnSprLoad : function(const szPicName: Pchar): HSPRITE;
    ...
    ...
  end;
Gruß Der Unwissende
  Mit Zitat antworten Zitat
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#3

Re: C++ Struct übersetzen zu Delphi record

  Alt 7. Feb 2007, 16:34
Vielen Dank.
Gut zu wissen, dass man auf der richtigen "Spur" ist.

EDIT: Sorry, wie entferne ich nun das Zeichen der "Offenen Frage"?
EDIT2: Hab es gefunden.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: C++ Struct übersetzen zu Delphi record

  Alt 7. Feb 2007, 16:37
Das sieht soweit gut aus. Ja, Funktionsdatentypen sind richtig.
Ob das Record packed sein muss oder nicht ist schwer zu entscheiden. Das kann von den Projektoptionen des C++ Programms abhaengen.
Gleichfalls ob die Funktionen cdecl odeer stdcall brauchen. Eins von beiden brauchen sie. Da es nicht angegeben ist wuerde ich auf cdecl tippen.
Es ist auch angebracht die Funktionsdatentypen als Hilfstypen zu deklarieren.
Delphi-Quellcode:
type
  HSPRITE = Integer;
  SprLoadFunc = function(const szPicName: Pchar): HSPRITE; cdecl;

  cl_enginefuncs_s = ^cl_enginefuncs_t;
  cl_enginefuncs_t = packed record
    pfnSprLoad : SprLoadFunc;
    ...
    ...
  end;
  Mit Zitat antworten Zitat
Lenny15

Registriert seit: 5. Jan 2007
10 Beiträge
 
#5

Re: C++ Struct übersetzen zu Delphi record

  Alt 7. Feb 2007, 16:47
Gut, danke. Ich werde testen wie sich das verhält, ich würde auch auf cdecl tippen.
Hilfstypen sind eine gute Idee.

EDIT:
Zitat:
Ob das Record packed sein muss oder nicht ist schwer zu entscheiden.
Hmm. Also im C++ Quellcode steht nirgendwo #pragma packed bla (weiss nicht genau wie das jezt hiess). Also wird es wohl doch nicht packed sein. Mal sehn
  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 06:27 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