Ich habe eine C ++ * .h Datei mit drei Klassen darin. Die Header-Datei dient zum Zugriff auf eine DLL. Ich habe fast kein C ++ - Wissen. Ich kann mich jedoch erinnern, dass Sie eine * .h-Datei nicht in eine Delphi-Einheit konvertieren können, in der Klassen enthalten sind. Ist das wahr?
Wenn es nicht wahr ist und Klassen in Headerdateien kein Problem darstellen, wie lautet der allgemeine Ansatz zum Konvertieren der Klassen nach Delphi?
In dem Sinne, dass Sie die DLL aus Delphi-Code verwenden können? Ja, viel Glück damit. Sie wissen, wie Sie Delphi-Klassen in einer DLL nicht verwenden können, es sei denn, der Client-Code ist in der gleichen Version von Delphi geschrieben, und selbst dann ist es normalerweise eine schlechte Idee, weil die Speicherverwaltung fehlschlägt. C ++ stellt genau das gleiche Problem dar, nur exponentiell schlechter, weil es kein standardisiertes ABI gibt und es gibt alle möglichen Arten von C ++ - sprich Sprache, die Ihnen Probleme bereitet.
Der einzige Weg, um es zuverlässig zu machen, ist eine Schnittstelle, die einen Standard-ABI verwendet. Wenn Sie über die Quelle verfügen, versuchen Sie, eine C-Schnittstelle zu erstellen, die die C ++ - Schnittstelle umschließt. Wenn nicht, fragen Sie die Person, die die DLL geschrieben hat, eine C-Schnittstelle zur Verfügung zu stellen und fragen Sie, wer die Entscheidung getroffen hat, diese DLL zu verwenden, warum Sie eine Drittanbieter-Bibliothek verwenden, für die keine Quelle verfügbar ist. : P
C ++ - Klassen sind, genau wie Delphi-Klassen, nicht für binäre Interoperabilität ausgelegt.
Eine Delphi-Klasse kann nur für die Verwendung durch anderen Delphi-Code und dann nur in einem Paket exportiert werden, und nur dann, wenn Laufzeitpakete verwendet werden, und nur dann, wenn alle Module die gleiche Version von Delphi verwenden. In ähnlicher Weise können C ++ - Klassen nur aus einer DLL durch Code importiert werden, der mit derselben Werkzeugkette kompiliert wurde, die die DLL kompiliert hat.
Es ist also nicht möglich, dass Ihr Delphi-Code diese DLL verwendet. Wie ich es sehe, haben Sie die folgenden Möglichkeiten:
Wie bereits in einer früheren Antwort erwähnt, verwendet die Lösung SWIG, um die Pascal-Bindung zu generieren. Ich begann mit der Entwicklung des Pascal-Moduls der SWIG, aber ich hatte keine Zeit, es zu vervollständigen. Grundsätzlich funktioniert es, aber es fehlen alle Testfälle, die in SWIG integriert werden sollen.
Ich habe es in meinen persönlichen Projekten verwendet und konnte eine komplexe Bibliothek als GDAL importieren.
Tags und Links c++ header-files delphi