Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++-DLL (https://www.delphipraxis.net/80691-c-dll.html)

TurboMartin 13. Nov 2006 19:37


C++-DLL
 
Hi DP :hi: :hi: :hi: ,
ich bin zur Zeit dabei, eine DLL in C++-Builder zu schreiben.
Allerdings blicke ich in der Hilfe nicht ganz durch.
Wie exportiere ich eine Funktion?
Und in der Hilfe unter Creating DLLs in C++Builder steht so ein gGerüst mit allen Funktionen, in der vorgefertigten cpp-Datei allerdings nicht.

Luckie 13. Nov 2006 21:38

Re: C++-DLL
 
Guckst du hier: http://www.delphi-forum.de/viewtopic...=388086#388086

dbdeath74 20. Nov 2006 10:27

Re: C++-DLL
 
Hallo Luckie,

ich habe dein Beispiel mal versucht :)

Visual c++ 2005 express erzeugt auch die dll.

Wenn ich nun versuche diese in Delphi einzubinden kompiliert er zwar, aber schon beim Aufruf von createForm kommt ein Speicherzugrifffehler :gruebel:

Ich binde die funktion mit:
Delphi-Quellcode:
function add(a: integer; b:integer):integer; stdcall; external 'addDLL.dll';
ein.

Frage:
Hat die header datei wirklich nur diese eine Zeile?
Ich habe die def datei zwar angelegt im c++ projekt, aber wie sage ich dem Linker das er sie benutzen soll?
Oder mache ich grundsätzlich etwas falsch? *g

Gruß Oliver

ste_ett 20. Nov 2006 10:32

Re: C++-DLL
 
Zeig mal die Deklaration deiner Funktion in der DLL. :)

Hast du dort auch __stdcall gesetzt?

dbdeath74 20. Nov 2006 10:39

Re: C++-DLL
 
Hallo,

öhmmm :gruebel:

Ich habe die drei Dateien aus Luckies Link orginal mit dem Quelltext angelegt wie sie da stehen. (addDLL.cpp, addDLL.h, addDLL.def)

Geändert habe ich an dieser Stelle nichts.
Und wenn ich mir die Deklaration in der cpp anschaue
Code:
EXPORT int add(int a, int b)
sehe ich da keinen von dir erwähnten _stdcall. :wiejetzt:

Gruß Oliver

Luckie 20. Nov 2006 10:42

Re: C++-DLL
 
Ich weiß jetzt nicht mehr mit was ich das programmiert habe. Aber unter VS kann man in den Projektoptionen einstellen, dass standardmäßig die Aufrufkonvention stdcall benutzt wird.

ste_ett 20. Nov 2006 10:47

Re: C++-DLL
 
Zitat:

Zitat von dbdeath74
Hallo,

öhmmm :gruebel:

Ich habe die drei Dateien aus Luckies Link orginal mit dem Quelltext angelegt wie sie da stehen. (addDLL.cpp, addDLL.h, addDLL.def)

Geändert habe ich an dieser Stelle nichts.
Und wenn ich mir die Deklaration in der cpp anschaue
Code:
EXPORT int add(int a, int b)
sehe ich da keinen von dir erwähnten _stdcall. :wiejetzt:

Gruß Oliver

Code:
EXPORT int __stdcall add(int a, int b)
Versuchs mal so. :)

Der_Unwissende 20. Nov 2006 10:49

Re: C++-DLL
 
Zitat:

Zitat von dbdeath74
sehe ich da keinen von dir erwähnten _stdcall.

Hi,
dann siehst du aber sicherlich auch nicht, dass die Dll statisch mit stdcall als Aufrufkonvention gebunden wird, oder?

Du kannst einfach ein __stdcall (achtung, 2 _) vor das __declspec(dllexport) setzen, dann sollte das mit dem Stdcall klappen. Ansonsten kommt es (imo) auf den Compiler an, was du hier für eine Aufrufkonvention vorfindest. Mit etwas Glück wäre das direkt pascal, mit etwas Pech ist es eher der C-konforme cdecl.

Gruß Der Unwissende

dbdeath74 20. Nov 2006 10:53

Re: C++-DLL
 
Hallo,

okay die Option habe ich gefunden.
Die stand auf _cdecl.
Jetzt geht alles :)
Also einfach umgestellt auf _stdcall in Projektoptionen.

Ich musste dem Linker auch noch meine def file mitgeben mit Additional Options beim Linker(Projektoptionen)
Muss man ja auch erstmal wissen *g
Zitat:

/DEF:"...\addDLL.DEF"
Vielen Dank für eure Hilfe :dp:

gruß Oliver


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