![]() |
C++ Struct übersetzen zu Delphi record
Ich habe folgende Struktur in C++:
Code:
Diese Struktur möchte ich gerne in Delphi übersetzen.
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; HSPRITE ist übrigens nur ein gewöhnlicher Integer; Folgender ist mein Ansatz:
Delphi-Quellcode:
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?
cl_enginefuncs_s = ^cl_enginefuncs_t;
cl_enginefuncs_t = packed record pfnSprLoad : function(const szPicName: Pchar): Integer; pfnSPR_Frames : function(hpic: Integer); ... ... end; Danke schonmal im vorraus. :) Grüße, Lenny |
Re: C++ Struct übersetzen zu Delphi record
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:
Gruß Der Unwissende
type
HSPRITE = Integer; cl_enginefuncs_s = ^cl_enginefuncs_t; cl_enginefuncs_t = packed record pfnSprLoad : function(const szPicName: Pchar): HSPRITE; ... ... end; |
Re: C++ Struct übersetzen zu Delphi record
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. :thumb: |
Re: C++ Struct übersetzen zu Delphi record
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; |
Re: C++ Struct übersetzen zu Delphi record
Gut, danke. Ich werde testen wie sich das verhält, ich würde auch auf cdecl tippen.
Hilfstypen sind eine gute Idee. :) EDIT: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 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