Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Funktion einer C++ Dll in Delphi aufrufen (https://www.delphipraxis.net/65060-funktion-einer-c-dll-delphi-aufrufen.html)

NikoMitDaMacht 11. Mär 2006 18:16


Funktion einer C++ Dll in Delphi aufrufen
 
Hallo!
Ich will mit c++ eine Dll machen die eine Funktion exportiert.
Diese soll in Delphi aufgerufen werden.
Aber irgendwas mache ich falsch:
Wenn ich das Delphi Progamm starte kommt der Fehler dass der Prozedur Einsprungspunkt "test" nicht gefunden wurde.
Hier mein code:

Die Dll (cpp):
Code:
#pragma comment(lib, "MEMMGR.LIB")

__declspec( dllexport ) char* test()
{
   return "Hello World";
}

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   return 1;
}
Aufruf:
Delphi-Quellcode:
type
function test: Pchar;external 'Project1.dll';

[...]
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(test);
end;
PS: ich hab eigentlich noch nie was mit dlls und c++ gemacht. Habe also wenig davon :-(
Danke an alle Leute die sich Samstag Abend noch mit solchen Problemen befassen!!!

jbg 11. Mär 2006 18:22

Re: Funktion einer C++ Dll in Delphi aufrufen
 
Von C++ exportierte Funktionsnamen sind sog. mangled names. Sie enthalten informationen über die Parameter usw. Jeder C++ Compiler generiert da seine eigenen Namen.
Da C++ Compiler auch C Compiler sind, kannst du die Funktionen als C-Funktionen exportieren.
Code:
extern "C" {

__declspec( dllexport ) char* test()
{
   return "Hello World";


}
Hast du das ganze mit dem Borland C++ Compiler kompiliert, lautet der Funktionsnamen nun "_test". Mit MSVC ist es ein schlichtes "test".

In Delphi kannst du die Funktion nun leicht importieren:
Delphi-Quellcode:
function test: PChar; cdecl; external 'Project1.dll' name '_test';
Das cdecl ist hier wichtig, weil es angibt, in welcher Reihenfolge und wie die Parameter übergeben werden.

NikoMitDaMacht 11. Mär 2006 18:30

Re: Funktion einer C++ Dll in Delphi aufrufen
 
DANKE DANKE DANKE!!!
Meine Rettung kurz vor der Verzweiflung! :dancer2: :dancer:


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