Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ mit Delphi vermischen (https://www.delphipraxis.net/27113-c-mit-delphi-vermischen.html)

Dannyboy 4. Aug 2004 13:43


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

DelphiFreund 4. Aug 2004 13:47

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

Robert Marquardt 4. Aug 2004 14:28

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!

Dannyboy 12. Aug 2004 13:01

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von Robert Marquardt
Nicht vergessen die Funktionsdeklarationen in einen
extern "C" {
einzuschliessen, damit das Name Mangling con C++ deaktiviert wird.
Keine Klassen im API!

Vielleicht ein einfaches Beispiel? :gruebel:

Robert Marquardt 12. Aug 2004 14:03

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

Robert Marquardt 12. Aug 2004 14:24

Re: C++ mit Delphi vermischen
 
Ach ja C++ Klassen sind komplett inkompatibel mit Delphi, deshalb nur einfache Funktionen exportieren.

Stevie 12. Aug 2004 14:29

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von Robert Marquardt
Ach ja C++ Klassen sind komplett inkompatibel mit Delphi, deshalb nur einfache Funktionen exportieren.

Da hab ich aber schon was anderes gelesen! Angeblich soll das gehen, wenn man in beiden Sprachen die Klasse gleich deklariert hat und gewisse Richtlinien beachtet hat. Dann kann man über den Pointer auf eine Instanz der erstellten Klasse zugreifen können. Aber hab ich noch nicht selber gemacht.

NicoDE 12. Aug 2004 14:51

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von Stevie
Da hab ich aber schon was anderes gelesen! Angeblich soll das gehen, wenn man in beiden Sprachen die Klasse gleich deklariert hat und gewisse Richtlinien beachtet hat. Dann kann man über den Pointer auf eine Instanz der erstellten Klasse zugreifen können. Aber hab ich noch nicht selber gemacht.

Dazu muss aber die beiden verwendeten Compiler ziemlich gut kennen. Und ohne einige Hacks wird man nicht auskommen.
Kurz: Es geht 'irgendwie', aber der Aufwand lohnt sich in 99% der Fälle nicht.

Stevie 12. Aug 2004 15:00

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von NicoDE
Dazu muss aber die beiden verwendeten Compiler ziemlich gut kennen. Und ohne einige Hacks wird man nicht auskommen.
Kurz: Es geht 'irgendwie', aber der Aufwand lohnt sich in 99% der Fälle nicht.

In diesem Artikel wird erklärt, wie's gehen soll!

Dannyboy 12. Aug 2004 15:10

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:

Stevie 12. Aug 2004 15:18

Re: C++ mit Delphi vermischen
 
Ein kleines Beispiel mit Funktionen und einer Struktur:
Header-Datei:
Code:
#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
C-Datei:
Code:
#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);
}
P.S.: Ist mit MSVC6 erstellt, kA, wie's mit BCB aussieht!

Dannyboy 12. Aug 2004 15:22

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

Robert Marquardt 12. Aug 2004 18:48

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.

Stevie 13. Aug 2004 07:45

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von Robert Marquardt
Stevie, der Header sieht scheisse aus. Bleib doch bei einer Sprache fuer die Namen deutsch oder englisch.
Gib doch struct STRUKTUR einen Typ.

:wiejetzt: Das ist ja auch nur eben so zusammengekleistert! :evil:

Robert Marquardt 13. Aug 2004 09:58

Re: C++ mit Delphi vermischen
 
Sorry fuer das starke Wort, aber ich bin bei schlecht geschriebenen oder formatierten Sourcen sehr empfindlich.

Dannyboy 13. Aug 2004 10:13

Re: C++ mit Delphi vermischen
 
Zitat:

Zitat von Robert Marquardt
Sorry fuer das starke Wort, aber ich bin bei schlecht geschriebenen oder formatierten Sourcen sehr empfindlich.

Dann solltest Du viellecht eher Deine konstruktiven Ansätze in Form von
Code unterstützend präsentieren, denn Kommentare wie...
Zitat:

Stevie, der Header sieht
scheisse aus
helfen eher unwesentlich weiter. Nix für Ungut, Mann. :cheers:
DANNYBOY


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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