AGB  ·  Datenschutz  ·  Impressum  







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

C++ DLL nutzen

Ein Thema von rawsoul · begonnen am 30. Nov 2007 · letzter Beitrag vom 30. Nov 2007
Antwort Antwort
Benutzerbild von rawsoul
rawsoul

Registriert seit: 29. Okt 2006
Ort: Düsseldorf
249 Beiträge
 
Delphi 2005 Personal
 
#1

C++ DLL nutzen

  Alt 30. Nov 2007, 08:13
Morgen zusammen,

ich hoffe ich bin in der richtigen Section.

Ich möchte eine DLL einer fremden C++ Anwendung in meinem DelphiLanguage (Win32) Projekt nutzen. Geht das überhaupt? Wenn ja, wie müsste ich an die Sache rangehen?

LG,
Frank.
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 08:30
Moin

Guckst du hier: Wie dat geit
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 08:30
C oder C++?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 09:32
Hi,
an sich findest Du in mittels Forensuche schon jede Menge zu dem Problem. An sich kannst Du aus Delphi heraus beliebige DLLs nutzen. DLLs werden nach einer bestimmten Spezifikation erzeugt, die es eben erlaubt, dass man die aus beliebigen Sprachen heraus aufrufen kann.
Das Problem ist dann dabei, dass Unterschiedliche Sprachen auch unterschiedliche Konstrukte anbieten. An sich fragt Luckie schon nach C oder C++, weil C++ Elemente verwenden kann, die Du nicht in ein Delphi-Pendand überführen kannst. Also im Prinzip geht das wohl schon, aber praktisch wäre es recht sinnfrei. So gibt es in C++ u.A. Templates, Strukturen deren Elemente nur eine bestimme Anzahl von Bits belegen, einen anderen Aufbau von Klassen usw.
An sich gibt es 3 Möglichkeiten, die man unterscheiden muss:
1. Die C++-DLLs basieren auf Borlands C++, wurden also z.B. auch durch das BDS erzeugt. Da ist dann (afaik) die Kompatibilität gegeben, soweit ich weiß sogar was statisch gebundene Files angeht (sicherlich auch mit geringen Einschränkungen)
2. Die C++-DLLs wurden mit einem anderen Compiler übersetzt und verwenden Elemente, die es so nicht in Delphi gibt (ganz schlecht, nicht wirklich gut nutzbar)
3. Die C++-DLLs wurden als "C-DLLs" gebaut (häufiger der Fall).

Auf den dritten Punkt (der so nicht ganz stimmt) möchte ich kurz näher eingehen. C++ compiler erzeugen immer C++ Code, gar keine Frage. Die Adressen von Funktionen werden in C++ anders berechnet als in C, man hatte/hat aber natürlich C++ immer unter dem Aspekt entwickelt, dass man möglichst komfortabel auch auf C-Code zurückgreifen kann. Hier besitzt C++ die Möglichkeit, dass man Funktionen nach dem "alten" C Prinzip benennt und somit eben auch für ein C-Programm verfügbar macht. Auch mit Klassen sieht es ähnlich aus, die gibt es einfach nicht in C. Trotzdem gibt es Momente wo C und C++ Code gemischt werden soll (z.B. wenn eine C-Vermittlung verwendet werden muss). Jedenfalls gibt es hier die Möglichkeit, dass man Code erzeugt, der intern zwar aus C++ besteht und sogar auf Klassen als Funktionsparameter zurückgreift, nach außen aber über eine C-Schnittstelle verwendbar ist. Klassen stehen dabei eben nur innerhalb der C++-Funktionen als solche zur Verfügung, nach außen hat man nur einen Zeiger auf etwas (i.d.R. eine Struktur ohne Elemente).
DLLs die in C++ geschrieben werden, setzen häufig solche Mechanismen ein um die Kompatibilität (die immer gewünscht ist) möglichst hoch zu halten. Das gleiche gilt übrigens nicht nur für C++, auch Java (mittels JNI) geht einen ählichen Weg und in Delphi-DLLs sollte man auch nur einfache Routinen und Strukturen verwenden, damit diese DLL auch durch C/C++ u.A. nutzbar ist.
An sich bietet es sich immer an, dass man die C-Kompatibilität sucht. Der einfache Grund dafür, C setzt sich aus wenigen und zudem recht einfachen Elementen zusammen. Diese findet man in fast jeder Sprache und damit ist das der kleinste gemeinsame Nenner (häufig auch schon der Größte).

Wenn Du eine DLL hast, die in C oder C++ geschrieben wurde, so liegt meistens auch eine Header-Datei (.h) bei, der kann man dann leicht entnehmen ob die DLL auch für Delphi nutzbar ist. Die kann man dann einfach in eine Delphi-Unit überführen und damit ist dann eben auch der Zugriff auf die DLL möglich.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

Registriert seit: 29. Okt 2006
Ort: Düsseldorf
249 Beiträge
 
Delphi 2005 Personal
 
#5

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 14:01
Dass man jede DLL-Funktion aus Delphi aufrufen kann, hatte ich gar nicht gewusst.

Vielen vielen Dank an euch alle, vor allem an Der_Unwissende für die sehr ausführliche Antwort, ihr habt mir bestens weitergeholfen!

Nun, die DLL wurde in C++ geschrieben, das steht fest. Quellcode habe ich jedoch nicht, daher auch keine Header. Ich werde mal mit den genannten Infos was kleines zusammenbasteln. Wenn Interesse am Resultat besteht, kann ich es gerne noch posten.

LG,
Frank.

//edit: Sinnverfälschtes Zitat korrigiert...
Frank Dumont
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 14:32
Exportiert die DLL eine C++-Klasse dann bist du aufgeschmissen. Es gibt kein binaerkompatibles API fuer so etwas. Exportiert die DLL aber reine C-Funktionen, dann ist es komplett egal in welcher Sprache die DLL geschrieben wurde.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: C++ DLL nutzen

  Alt 30. Nov 2007, 22:59
http://rvelthuis.de/articles/articles-cppobjs.html
Markus Kinzler
  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 13:02 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