AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi C++ vs. Delphi - Ist der Code richtig übersetzt?
Thema durchsuchen
Ansicht
Themen-Optionen

C++ vs. Delphi - Ist der Code richtig übersetzt?

Ein Thema von napsterxx · begonnen am 28. Okt 2008 · letzter Beitrag vom 1. Nov 2008
Antwort Antwort
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#1

C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 28. Okt 2008, 18:39
Also vll hat der ein oder andere schon in diesem Thread herumgestöbert:
http://www.delphipraxis.net/internal...t.php?t=145044

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ß
Ich glaube, das ich etwas hier falsch übersetz habe:
C++ Code
Delphi-Quellcode:
//   this is how garena gets a pointer to the plugin class
extern "C" __declspec(dllexport)
IGamePlugin* CreatePlugin()
{
   static CExampleTcpPlugin _plugin;
    return &_plugin;
}
Delphi Code
Delphi-Quellcode:
function CreatePlugin(): Pointer; stdcall;
var
  _plugin: IGamePlugin;
begin
  _plugin := IGamePlugin.Create;
  Result := @_plugin;
end;

exports
  CreatePlugin;
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 28. Okt 2008, 20:14
Das müsste meiner Ansicht nach Result := Pointer(_plugin) heißen.
Ist IGamePlugin kein Interface?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 29. Okt 2008, 00:08
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:
Constructor() called
GetName() called
IsGameType() called
Bei meinem Delphi-Plugin sieht der Inhalt jedoch so aus:
Zitat:
Constructor() called
OnAfterInitGame() called
GetName() called
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#4

Re: C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 29. Okt 2008, 06:59
Code:
class IGamePlugin
{
public:
   virtual int IsGameType(int * gameTypes, int nMax) = 0;
};
Das ist compilerspezifisch und sieht bei MSVC in Delphi-Pseudo-Code etwa so aus:
Delphi-Quellcode:
type
  IGamePluginVtbl = record
    IsGameType: function(gameTypes: PInteger; nMax: Integer): Integer; stdcall; // ecx = this (Self)!
    //...
  end;
  IGamePlugin = record
    Vtbl: ^IGamePluginVtbl;
    //...
  end;
Alleine schon wegen der Aufrufkonvention (__thiscall) lässt sich das nicht ohne Tricks (und Assembler) in Delphi32 abbilden.

Kurz: Was Du vorhast, ist eigentlich Arbeit für jemanden, der sich in beiden Welten auskennt (und Lust und Zeit hat).
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 29. Okt 2008, 11:04
Habe das jetzt so alles geändert wie von dir beschrieben, aber immernoch ruft er in der falschen Reihenfolge die funktionen auf
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: C++ vs. Delphi - Ist der Code richtig übersetzt?

  Alt 1. Nov 2008, 17:37
Mh ich denke nicht das das jemand kann und macht
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  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 07:55 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