![]() |
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 |
AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
Du deklarierst im Programm und in der DLL den Funktionstyp, z.B.:
Delphi-Quellcode:
legst die Funktion in Deinem Programm an
type
TAddiere =Function(const a,b:Integer):Integer;
Delphi-Quellcode:
übergibst der DLL den Callback
Function Addiere(const a,b:Integer):Integer;
begin Result := a + b; end;
Delphi-Quellcode:
InitProc(@Addiere);
merkst Dir in der DLL die Adresse der Funktion:
Delphi-Quellcode:
verwendest die funktion in der DLL
Procedure InitProc(f:TAddiere);
begin FAddiere := f; // irgendwo deklariert als f:TAddiere; end;
Delphi-Quellcode:
Wenn Du auf Methoden zugreifen willst lautet die Deklaration
Z :=Faddiere(x,y)
Delphi-Quellcode:
TAddiere =Function(const a,b:Integer):Integer of object;
Wie immer Strings und andere dynamische Strukturen nur mit Sharemem .... |
AW: In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?
Zitat:
|
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? |
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 06:07 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 by Thomas Breitkreuz