Delphi-PRAXiS

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

zeras 28. Mai 2018 21:16

C++ DLL (Funktion) nach Delphi
 
Ich möchte eine DLL nutzen, wofür es auch ein Beispiel in C gibt:

Code:
IPC_API HRESULT WINAPI InitIPC(WORD index);
Wie müsste diese in Delphi deklariert werden? Ich habe schon eine DLL eines anderen Herstellers implementiert. Dort hatte ich einige Zeit gebraucht, um das korrekt zu Implementieren. Ich denke da an cdecl oder ?

KodeZwerg 28. Mai 2018 21:33

AW: C++ DLL (Funktion) nach Delphi
 
Meinst Du sowas wie
Delphi-Quellcode:
function InitIPC(Index: Word): HRESULT; stdcall; external 'name der.dll';
?

Der schöne Günther 28. Mai 2018 21:35

AW: C++ DLL (Funktion) nach Delphi
 
WINAPI ist schonmal stdcall und nicht cdecl ;-)

Was IPC_API ist? Keine Ahnung. Steht da nicht mehr?

zeras 28. Mai 2018 21:52

AW: C++ DLL (Funktion) nach Delphi
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1403249)
WINAPI ist schonmal stdcall und nicht cdecl ;-)

Was IPC_API ist? Keine Ahnung. Steht da nicht mehr?

Das habe ich noch gefunden:
Code:
#ifdef IPC_EXPORTS
#define IPC_API __declspec(dllexport)
#else
#define IPC_API __declspec(dllimport)
#endif

#ifndef WINAPI
#define WINAPI __stdcall
#endif

#ifndef HRESULT
#define HRESULT long
#endif
Vielleicht hilft das noch weiter.

zeras 28. Mai 2018 21:57

AW: C++ DLL (Funktion) nach Delphi
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403248)
Meinst Du sowas wie
Delphi-Quellcode:
function InitIPC(Index: Word): HRESULT; stdcall; external 'name der.dll';
?

So in etwas hatte ich das bei einer anderen DLL eines anderen Anbieters gemacht:

Code:
function OttOpen: int32_t stdcall; external NameDLL name 'OttOpen';
wobei NameDLL, wie zu vermuten, der Name der DLL ist.

KodeZwerg 28. Mai 2018 22:14

AW: C++ DLL (Funktion) nach Delphi
 
Bedeutet das, dass das was ich schrieb funktioniert oder wie soll ich das interpretieren?

zeras 28. Mai 2018 22:18

AW: C++ DLL (Funktion) nach Delphi
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403252)
Bedeutet das, dass das was ich schrieb funktioniert oder wie soll ich das interpretieren?

Danke für den Code.

Das kann ich erst morgen testen. Ich gebe dann wieder Bescheid.

KodeZwerg 28. Mai 2018 22:20

AW: C++ DLL (Funktion) nach Delphi
 
Ja gern geschehen, external 'name der.dll'; <- nicht vergessen mit richtigen Namen auszutauschen.
Ich kenne ja dll name nicht.
Viel Erfolg dabei!

Zacherl 29. Mai 2018 00:54

AW: C++ DLL (Funktion) nach Delphi
 
Das
Code:
#ifdef IPC_EXPORTS
#define IPC_API __declspec(dllexport)
#else
#define IPC_API __declspec(dllimport)
#endif
ist lediglich die C/C++ Art mit Exports über Library/Dll Grenzen umzugehen. Die Library selbst definiert
Delphi-Quellcode:
IPC_EXPORTS
, wodurch die entsprechend gekennzeichneten Funktionen dann exportiert (
Delphi-Quellcode:
dllexport
) werden und jedes Projekt, was die Library verwendet, definiert das Macro nicht, wodurch der Linker weiß, dass die Funkionen in einer Dll liegen (
Delphi-Quellcode:
dllimport
was gleichbedeutend ist mit Delphis
Delphi-Quellcode:
external
).

zeras 29. Mai 2018 11:29

AW: C++ DLL (Funktion) nach Delphi
 
Dank für eure Tipps.
Ich habe nun die ersten Werte bekommen mit folgendem Aufruf:

Code:
Const NameDLL = 'IPC.DLL';

function InitIPC(index: word): HRESULT; stdcall; external NameDLL name 'InitIPC';

KodeZwerg 29. Mai 2018 11:58

AW: C++ DLL (Funktion) nach Delphi
 
Frage in die Runde
Was bewirkt das zusätzliche "NAME 'FUNKTIONSNAME'" ? Ich habe schon oft Dlls Importiert aber nie diese Floskel benutzt.
Kann es sein das es nur dafür dient das wenn meine "function xyz" oder "procedure xyz" benannt ist aber aus dll "zxy" genutzt werden soll das "name 'zxy'" dies dann ermöglicht?

himitsu 29. Mai 2018 11:59

AW: C++ DLL (Funktion) nach Delphi
 
Wenn "dein" Funktion-Name mit dem Import-Name übereinstimmt, dann muß
Delphi-Quellcode:
name 'xxx'
nicht angegeben werden.

Delphi-Quellcode:
Const NameDLL = 'IPC.DLL';

function InitIPC(index: word): HRESULT; stdcall; external NameDLL;

function IPC_InitIPC(index: word): HRESULT; stdcall; external NameDLL name 'InitIPC';

function DasKannAuchSonstwieBenanntWerden(index: word): HRESULT; stdcall; external NameDLL name 'InitIPC';
Viele machen bei Imports noch einen Präfix/Klassennamen davor, damit wenn du z.B. eine Funktion "Init" von zwei DLLs importierst, die Namen eindeutig sind, ohne zusätzliche Angabe des Namespace (Unitnamen).

KodeZwerg 29. Mai 2018 12:18

AW: C++ DLL (Funktion) nach Delphi
 
Danke für meine Vermutung, auch wenn ichs bestimmt falsch ausgedrückt habe meinte ich es genau wie Du geschildert hast.
Danke himitsu!

zeras 29. Mai 2018 19:08

AW: C++ DLL (Funktion) nach Delphi
 
Zitat:

Zitat von himitsu (Beitrag 1403302)
Wenn "dein" Funktion-Name mit dem Import-Name übereinstimmt, dann muß
Delphi-Quellcode:
name 'xxx'
nicht angegeben werden.

Danke für den Tipp. Habe das gleich weggelassen, da ich noch viele Funktionen deklarieren muss. Da spare ich mir noch ein wenig Arbeit.

Rollo62 29. Mai 2018 19:29

AW: C++ DLL (Funktion) nach Delphi
 
[OT] // C nach Delphi
Hier das ist gerade frisch rausgekommen ..
[/OT]

Wird dir bei C++ aber erstmal nichts nützen, ich hoffe aber das es dort auch damit weitergeht.

Rollo

KodeZwerg 29. Mai 2018 19:31

AW: C++ DLL (Funktion) nach Delphi
 
Darauf wollte ich hinaus, Dir Zeit zu ersparen, ich war mir nur nicht zu 100% Gewiss obs so ist wie ichs dachte.
Bevor ich mumpitz schreibe (hiermit getan) bohrte ich nach :lol:


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