Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter? (https://www.delphipraxis.net/163790-dll-funktion-aus-hautprogramm-verwenden-funktion-als-parameter.html)

DelphiPeter 16. Okt 2011 19:59

Delphi-Version: 2007

In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
 
Hallo Freunde!

Ich würd´ gern in meiner DLL eine Funktion aus meinem Hauptprogramm verwenden. Der Aufruf dieser Funktion würde in einer exportierten DLL Funktion realisiert werden. Frage: Kann ich irgendwie eine Funktion von meinem Hauptprogramm als Parameter an meine DLL weitergeben und dort aufrufen?

Meine Gedanken dazu waren:

- Kann ich die "Adresse" einer Funktion ermitteln und diese weitergeben?
- Wenn das geht, kann ich die Funktion anhand dieser Adresse aurufen?


Kann mir jemand helfen?

Ich wäre euch sehr dankbar!

Danke,
Peter

Bummi 16. Okt 2011 21:59

AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
 
Du deklarierst im Programm und in der DLL den Funktionstyp, z.B.:
Delphi-Quellcode:
type
  TAddiere =Function(const a,b:Integer):Integer;
legst die Funktion in Deinem Programm an
Delphi-Quellcode:
Function Addiere(const a,b:Integer):Integer;
begin
  Result := a + b;
end;
übergibst der DLL den Callback
Delphi-Quellcode:
   InitProc(@Addiere);

merkst Dir in der DLL die Adresse der Funktion:

Delphi-Quellcode:
Procedure InitProc(f:TAddiere);
begin
  FAddiere := f; // irgendwo deklariert als f:TAddiere;
end;
verwendest die funktion in der DLL

Delphi-Quellcode:
Z :=Faddiere(x,y)
Wenn Du auf Methoden zugreifen willst lautet die Deklaration
Delphi-Quellcode:
  TAddiere =Function(const a,b:Integer):Integer of object;

Wie immer Strings und andere dynamische Strukturen nur mit Sharemem ....

FredlFesl 17. Okt 2011 06:31

AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
 
Zitat:

Zitat von Bummi (Beitrag 1130750)
...
Wenn Du auf Methoden zugreifen willst lautet die Deklaration
Delphi-Quellcode:
  TAddiere =Function(const a,b:Integer):Integer of object;

Das das auch geht, wusste ich noch nicht.

DelphiPeter 18. Okt 2011 16:16

AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
 
Hallo Bummi!

Danke für deine Antwort. Ich habe nun ein klitze kleines Problem, an das ich nicht gedacht habe. Die Funktion die hinzugefügt wird, kann beliebig heißen, und beliebige Aufrufparameter haben und beliebigen Rückgabetyp.

Hast du da vielleicht noch einen Tipp für mich?

Bummi 18. Okt 2011 19:35

AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
 
Der Name ist wurscht, die Parameter und Rückgabewerte müssen definiert sein also mußt Du u.U. einene ganzen Stapel Deklarationen anlegen und Zeiger übergeben.
Wenn Du auf beiden Seiten eingreifen kannst wäre auch eine Recordstuktur o.ä. denkbar über deren Inhalte und Bedeutungen sich beide Teile einig sind.


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