Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Borland C++ Dll export (https://www.delphipraxis.net/168862-borland-c-dll-export.html)

EWeiss 14. Jun 2012 20:57

Borland C++ Dll export
 
versuche gerade mal in Borland c++ eine DLL zu erstellen.
aber achtung habe das noch nie gemacht.

mein export sieht so aus

Code:
long MidiClass::getLyricTime(long index)
Code:
extern "C" __declspec(dllexport)long getLyricTime(long index);
glaube aber das es nicht richtig ist auch wenn der compiler nicht meckert.
ich hab die DLL mal in depends eingeladen aber keine exports gefunden.

wie müßte dieser aussehen das ich ihn auch in Delphi/Pascal verwenden kann?

gruss

EWeiss 15. Jun 2012 17:45

AW: Borland C++ Dll export
 
ops.. Niemand hier der C++ kann. :gruebel:

gruss

NickelM 15. Jun 2012 18:26

AW: Borland C++ Dll export
 
Hm, also ich würd sagen so in etwa:
Delphi-Quellcode:
function getLyricTime(index : LongInt) : LongInt; cdecl; external 'dllname.dll';
//Wenn LongInt net geht direkt Integer

EWeiss 15. Jun 2012 18:54

AW: Borland C++ Dll export
 
Zitat:

Zitat von NickelM (Beitrag 1171085)
Hm, also ich würd sagen so in etwa:
Delphi-Quellcode:
function getLyricTime(index : LongInt) : LongInt; cdecl; external 'dllname.dll';
//Wenn LongInt net geht direkt Integer

Danke mein problem ist nur kann keine exports in der DLL ausmachen.
Oder sind die bei BC++ nicht sichtbar?

Un ob der Export so wie ich ihn ausführe richtig ist kann ich auf anhieb auch nicht sagen.

Mit depends seh ich nichts.
Das einbinden in Delphi mach ich ja auch so nur dann muss die Function auch public sein.

Edit:
So wie ich mir dachte da stimmt was nicht der Einsprungspunkt wird nicht gefunden.

gruss

Robotiker 16. Jun 2012 10:13

AW: Borland C++ Dll export
 
Hallo,

du schreibst "Borland C++", ist das wirklich etwas altes aus vor Delphi Zeiten ? Oder meinst du den C++ Builder ?

Zitat:

Zitat von EWeiss (Beitrag 1170946)
Code:
long MidiClass::getLyricTime(long index)

Das ist die Memberfunktion einer Klasse, bzw. der Anfang der Definition der selben.

Zitat:

Zitat von EWeiss (Beitrag 1170946)
Code:
extern "C" __declspec(dllexport)long getLyricTime(long index);

Das ist die Deklaration einer C-Funktion. Nicht identisch mit der obigen Memberfunktion. Wenn es keine Implementierung dazu gibt, wird auch kein Export erzeugt und der Compiler meckert auch nicht. Soweit alles ok.

Man kann keine Memberfunktionen von Klassen "lose" aus einer DLL exportieren. Nur ganze Klassen, mit denen kann Delphi aber wohl nichts anfangen.

Mit einer C-Funktion habe ich das gerade mal im C++ Builder XE2 getestet. Ein
Code:
extern "C" __declspec(dllexport) int foo()
{
  return 42;
}
wird brav als _foo exportiert.

Mit einer zusätzlichen Moduldefinitionsdatei
Code:
LIBRARY TestDll

EXPORTS
        foo = _foo
auch zusätzlich als foo.

Nur wie man nur foo exportiert, kriege ich gerade nicht raus. In Visual Studio ginge das mit
Code:
LIBRARY TestDll

EXPORTS
        foo
aber da kommt beim Builder eine Linkerwarnung (und _foo).

EWeiss 16. Jun 2012 10:22

AW: Borland C++ Dll export
 
Zitat:

du schreibst "Borland C++", ist das wirklich etwas altes aus vor Delphi Zeiten ? Oder meinst du den C++ Builder ?
Ja meine den C++ Builder

Code:
long MidiClass::getLyricTime(long index)
Ist die function welche ich exportieren möchte.

habe jetzt mal eine andere alternative versucht.
Code:
extern "C" __declspec(dllexport) long __stdcall getLyricTime(long index);
und unter Compiler ausgabe "Exportierten Symbolen keinen Unterstrich voranstellen"

So gehts alles nicht hab einfach bzw. fast keine Kenntnis was C++ Bulider angeht.
In C++ keine problem da leg ich ne "def" an und gut ist.

Edit:
Zitat:

Nur ganze Klassen, mit denen kann Delphi aber wohl nichts anfangen.
Dann kann ich das wohl vergessen ;)

Danke für die Hilfe

gruss

Robotiker 16. Jun 2012 10:58

AW: Borland C++ Dll export
 
Zitat:

Zitat von EWeiss (Beitrag 1171122)
habe jetzt mal eine andere alternative versucht.
Code:
extern "C" __declspec(dllexport) long __stdcall getLyricTime(long index);

Wie schon gesagt, das hat nichts mit der Memberfunktion aus der Klasse zu tun. Schon auch, weil die Anzahl der Paramter unterschiedlich ist. Eine nicht statische C++ Memberfunktion hat implizit immer den this-Pointer als ersten Parameter.

Zitat:

Zitat von EWeiss (Beitrag 1171122)
In C++ keine problem da leg ich ne "def" an und gut ist.

Du meinst Visual C++ ? Wie oben gezeigt, geht das mit der .def im Builder fast genau so.

Zitat:

Zitat von EWeiss (Beitrag 1171122)
Zitat:

Nur ganze Klassen, mit denen kann Delphi aber wohl nichts anfangen.
Dann kann ich das wohl vergessen ;)

Umgekehrt geht es, der Builder kann mit *.pas Dateien und Delphi Packages und Komponenten umgehen. Wenn du also mit diesem C++ Code, den du da anscheinend hast, ein VCL-Programm schreiben willst, mach es statt mit Delphi mit dem C++ Builder, das ist sein wesentlicher Daseinszweck.

EWeiss 16. Jun 2012 11:02

AW: Borland C++ Dll export
 
Danke für deine Erläuterungen muss meinen versuch dann wohl erstmal bei seite schieben.

gruss


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