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
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#1

C++ Klasse in Delphi importieren

  Alt 1. Okt 2005, 00:30
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
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
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
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#3

Re: C++ Klasse in Delphi importieren

  Alt 1. Okt 2005, 22:55
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
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  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 14:45 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