![]() |
C++ vs. Delphi - Ist der Code richtig übersetzt?
Also vll hat der ein oder andere schon in diesem Thread herumgestöbert:
![]() In diesem ging es einfach ob es Möglich sei dies zu Übersetzen. Da ich letzen Endes nicht wusste ob es nun möglich ist oder nicht, habe ich es einfach einmal gemacht. Kurz zu dem Programm Garena. Läd es eine DLL so wird eine Funktion namens CreatePlugin aufgerufen und dann wird eine weitere Funktion namens GetName aufgerufen. Ich habe mir ein lauffähiges Plugin (geschrieben in C++) mit Soucecode besorgt um es zu übersetzen. Hoffe der ein oder andere hat einen Denkanstoß :D Ich glaube, das ich etwas hier falsch übersetz habe: C++ Code
Delphi-Quellcode:
Delphi Code
// this is how garena gets a pointer to the plugin class
extern "C" __declspec(dllexport) IGamePlugin* CreatePlugin() { static CExampleTcpPlugin _plugin; return &_plugin; }
Delphi-Quellcode:
function CreatePlugin(): Pointer; stdcall;
var _plugin: IGamePlugin; begin _plugin := IGamePlugin.Create; Result := @_plugin; end; exports CreatePlugin; |
Re: C++ vs. Delphi - Ist der Code richtig übersetzt?
Das müsste meiner Ansicht nach Result := Pointer(_plugin) heißen.
Ist IGamePlugin kein Interface? |
Re: C++ vs. Delphi - Ist der Code richtig übersetzt?
Interface?
Ich habe es geschafft, endlich wird die Funktion GetName aufgerufen, jedoch auch schon beim start von Garena AfterInitGame. Was eigentlich nicht sein dürft. Also wenn das funktionierende Plugin bei jedem Aufruf einer Methode den Namen dieser in eine Text Datei schreibt sieht der Inhalt dieser nach dem einloggen wie folgt aus: Zitat:
Zitat:
|
Re: C++ vs. Delphi - Ist der Code richtig übersetzt?
Code:
Das ist compilerspezifisch und sieht bei MSVC in Delphi-Pseudo-Code etwa so aus:
class IGamePlugin
{ public: virtual int IsGameType(int * gameTypes, int nMax) = 0; };
Delphi-Quellcode:
Alleine schon wegen der Aufrufkonvention (__thiscall) lässt sich das nicht ohne Tricks (und Assembler) in Delphi32 abbilden.
type
IGamePluginVtbl = record IsGameType: function(gameTypes: PInteger; nMax: Integer): Integer; stdcall; // ecx = this (Self)! //... end; IGamePlugin = record Vtbl: ^IGamePluginVtbl; //... end; Kurz: Was Du vorhast, ist eigentlich Arbeit für jemanden, der sich in beiden Welten auskennt (und Lust und Zeit hat). |
Re: C++ vs. Delphi - Ist der Code richtig übersetzt?
Habe das jetzt so alles geändert wie von dir beschrieben, aber immernoch ruft er in der falschen Reihenfolge die funktionen auf
|
Re: C++ vs. Delphi - Ist der Code richtig übersetzt?
Mh ich denke nicht das das jemand kann und macht
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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 by Thomas Breitkreuz