AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Klasse in Delphi importieren

Ein Thema von c113plpbr · begonnen am 1. Okt 2005 · letzter Beitrag vom 1. Okt 2005
Antwort Antwort
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

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
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 10:55 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