Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: C++ Klasse in Delphi importieren

  Alt 1. Okt 2005, 10:24
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.
  Mit Zitat antworten Zitat