AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?

In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?

Ein Thema von DelphiPeter · begonnen am 16. Okt 2011 · letzter Beitrag vom 18. Okt 2011
Antwort Antwort
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#1

In DLL Funktion aus Hautprogramm verwenden - Funktion als Parameter?

  Alt 16. Okt 2011, 19:59
Delphi-Version: 2007
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
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

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

  Alt 16. Okt 2011, 21:59
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
   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

Z :=Faddiere(x,y) Wenn Du auf Methoden zugreifen willst lautet die Deklaration
  TAddiere =Function(const a,b:Integer):Integer of object;
Wie immer Strings und andere dynamische Strukturen nur mit Sharemem ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#3

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

  Alt 17. Okt 2011, 06:31
...
Wenn Du auf Methoden zugreifen willst lautet die Deklaration
  TAddiere =Function(const a,b:Integer):Integer of object;
Das das auch geht, wusste ich noch nicht.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#4

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

  Alt 18. Okt 2011, 16:16
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?
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

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

  Alt 18. Okt 2011, 19:35
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf