Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C++ Klasse in Delphi importieren (https://www.delphipraxis.net/54291-c-klasse-delphi-importieren.html)

c113plpbr 1. Okt 2005 00:30


C++ Klasse in Delphi importieren
 
Hallo DP'ler,

wie der Titel schon sagt, möchte ich eine in C++ geschriebene, zu einer DLL compilierte & daraus exportierte Klasse in Delphi als Klasse wieder importieren (falls das denn möglich ist, in C++ ist es das zumindest).
Und da ich kaum eine Idee habe wie ich das anstellen soll, und meine bisherigen Recherchen kaum etwas zu Tage gebracht haben, frage ich einfach mal euch, ob ihr mir bei meinem Problem helfen könnt.

Ich wäre dankbar für Erklärungen sowie für Beispiele, die mir weiterhelfen könnten.

Da diese DLL ein Teil eines Gemeinschaftsprojektes ist (ein Freund von mir (den ich noch nicht überzeugen konnte in Delphi zu programmieren ;) ) schreibt die DLL in C++), stehen im Moment noch alle Möglichkeiten offen, dies auch anders zu realisieren, aber Klassen wären vermutlich das praktischte ^^.

Was ich vielleicht noch dazu sagen sollte: Ich glaube es würde wenig Sinn machen, die funktionen dieser Klasse einzelnd zu importieren, denn dann könnten wir genausogut auf eine andere methode umsteigen, daher suche ich eher nach einer Methode die gesamte Klasse soweit möglich "auf einmal" zu importieren (ob statisch oder zur laufzeit sollte egal sein).

ciao & thx,
Philipp

jbg 1. Okt 2005 10:24

Re: C++ Klasse in Delphi importieren
 
C++ Klassen zu importieren ist (fast) unmöglich.
Das geht los mit dem Name Mangling, das jedem C++ Compiler eigen ist. Weiter geht es damit, dass die C++ Klassen einen ganz anderen internen Aufbau als Delphi-Klassen haben. Das fängt schon mit der VMT an, die je nach C++ Compiler anders aussehen kann. Und endet damit, wo nun der VMT-Zeiger in die Klasse eingefügt wird. Bei Delphi ist er immer an Offset 0. Bei C++ können da auch mal ein paar Felder davor stehen. Statische Methoden lassen sich nur über normale Funktionen einbinden, weil Delphi jünger als 2005 noch keine statischen Klassenmethoden unterstützen. Sämtliche Inline-Funktionen in C++ müssen nach Delphi übersetzt werden weil diese nicht exportiert werden (Templates gehen schon mal gar nicht).
Die ABI von C++ ist nunmal nichts für andere Sprache. Deswegen baut man auch immer eine C++-Wrapper DLL, die ein C-Interface zu jeder Methode und dem Konstruktor sowie Destruktor bereit stellt. Man muss also die C++-Klasse "flatten", wenn man von einer anderen Programmiersprache darauf zugreifen will.

Was geht sind Interfaces und die auch nur mit nicht gcc-Compilern.
Ein Interface in C++ ist nämlich nichts anderes als eine abstrakte Klasse (also alle Methoden sind virtuell aber abstrakt). Diese abstrakten Klassen kann man in Delphi mit Interfaces importieren. Man braucht dann aber auf der C++ Seite die AddRef, Release Methoden in der Klasse und eine C-Funktion, die die entsprechende geerbte Klasse instanziert.

c113plpbr 1. Okt 2005 22:55

Re: C++ Klasse in Delphi importieren
 
Ok, das war auch schon alles, was ich wissen wollte ... denn ich hatte fast das gefühl, dass ich zu dumm dazu bin, aber wenn das thema so kompliziert ist, wie du behauptest, dann nehmen wir einen anderen Weg.

ciao, Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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