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
 
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
 


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 06:39 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