![]() |
C++ mit Delphi vermischen
Hallo,
für ein demnächst anstehendes Projekt möchte ich in C++ DLLs erstellen und diese in Delphi verwenden. Habt ihr vielleicht ein Beispiel, aus dem hervorgeht, wie man mit „Borland C++“ DLL- Dateien erstellt und diese anschließend in Delphi verwendet? Hat jemand schon mal so was gemacht? :gruebel: DANNYBOY |
Re: C++ mit Delphi vermischen
Ich kenn mich C++ eigentlich nicht aus, aber DLL's werden, denke ich, auch nicht anders erstellt, einfach mit Parameter 'stdcall' deklarieren und genauso aufrufen.
Gruß DelphiFreund |
Re: C++ mit Delphi vermischen
Nicht vergessen die Funktionsdeklarationen in einen
extern "C" { einzuschliessen, damit das Name Mangling con C++ deaktiviert wird. Keine Klassen im API! |
Re: C++ mit Delphi vermischen
Zitat:
|
Re: C++ mit Delphi vermischen
Auch ohne Klassen generiert der C++ Compiler unterschiedliche exportierte Namen je nachdem ob die C Funktion in
die "extern "C" {" Klammer eingeschlossen ist oder nicht. Mit extern C wird beispielsweise "BlaBlubb" exportiert ohne "_BlaBlubb@P" Das nennt sich Name Mangling. Es werden die Typen der Parameter in den Namen kodiert. De Unterstrich ist amuesanterweise eine alte C-Tradition. Damit lassen sich gleiche Funktionen mit unterschiedlichen Namen unterscheiden (overload in Delphi). |
Re: C++ mit Delphi vermischen
Ach ja C++ Klassen sind komplett inkompatibel mit Delphi, deshalb nur einfache Funktionen exportieren.
|
Re: C++ mit Delphi vermischen
Zitat:
|
Re: C++ mit Delphi vermischen
Zitat:
Kurz: Es geht 'irgendwie', aber der Aufwand lohnt sich in 99% der Fälle nicht. |
Re: C++ mit Delphi vermischen
Zitat:
![]() |
Re: C++ mit Delphi vermischen
Sehr interessant, das wäre nämlich ohnehin meine nächste Frage gewesen,
wie das Ganze im OOP-Bereich aussieht. Ich kann mir konkret noch nicht vorstellen, wie man in C++ eine DLL-Datei erstellt. Das Importieren in Delphi verstehe ich schon ganz gut. Habt ihr vielleicht ein kleines Beispiel, welches eine einzige C++-Funktion exportiert? :gruebel: |
Re: C++ mit Delphi vermischen
Ein kleines Beispiel mit Funktionen und einer Struktur:
Header-Datei:
Code:
C-Datei:
#ifndef DELPHI_H
#define DELPHI_H #include <windows.h> #define DllImport __declspec(dllimport) #define DllExport __declspec(dllexport) DllExport struct STRUKTUR { int wert; }; DllExport int Get(struct STRUKTUR s); DllExport void Set(struct STRUKTUR* ptr_s, int wert); DllExport void ZeigeNachricht(HWND hWnd, char* Nachricht); #endif
Code:
P.S.: Ist mit MSVC6 erstellt, kA, wie's mit BCB aussieht!
#include "delphi.h"
DllExport int Get(struct STRUKTUR s) { return s.wert; } DllExport void Set(struct STRUKTUR* ptr_s, int wert) { if (ptr_s) ptr_s->wert = wert; } DllExport void ZeigeNachricht(HWND hWnd, char* Nachricht) { MessageBox(hWnd, Nachricht, 0, MB_OK); } |
Re: C++ mit Delphi vermischen
Oh Mann, das DLL-Zeugs ist in Delphi aber übersichtlicher als
in C++ ... so wie alles andere auch. :mrgreen: Dank' Dir, ich werde mich da hineinknien. :thumb: :thumb: :thumb: DANNYBOY |
Re: C++ mit Delphi vermischen
Ich glaube C++ Builder und Delphi vertragen sich einigermassen bei Klassen, aber es ist trotzdem ein Fehler Klassen in DLLs zu haben.
Globale Variablen aus einer DLL zu exportieren gibt Aerger mit Delphi. Stevie, der Header sieht scheisse aus. Bleib doch bei einer Sprache fuer die Namen deutsch oder englisch. Gib doch struct STRUKTUR einen Typ. |
Re: C++ mit Delphi vermischen
Zitat:
|
Re: C++ mit Delphi vermischen
Sorry fuer das starke Wort, aber ich bin bei schlecht geschriebenen oder formatierten Sourcen sehr empfindlich.
|
Re: C++ mit Delphi vermischen
Zitat:
Code unterstützend präsentieren, denn Kommentare wie... Zitat:
DANNYBOY |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 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