AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Callback-Funktion erstellen?

Ein Thema von romber · begonnen am 23. Mai 2013 · letzter Beitrag vom 28. Mai 2013
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

AW: Callback-Funktion erstellen?

  Alt 27. Mai 2013, 22:21
Dieses Tutorial habe ich an erster Stelle gelesen. Mir war und ist bis jetzt nicht klar, welches Teil wohin kommt. So wie es dort beschrieben ist, gehört die ganze Code in das Hauptprogramm, was für mich keinen Sinn ergibt. Wieso braucht man eine Callback-Funktion in dem Hauptprogramm, wo die eigentliche Funktion deklariert ist?
Natürlich liege ich da absolut falsch, denn Luckie hat mit diesem und mit anderen Tutorials auf seiner Seite klasse Arbeit geleistet. Ich bin es, der das nicht kapiert. Deswegen auch meine Frage.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Callback-Funktion erstellen?

  Alt 27. Mai 2013, 22:28
Ja, in diesem Tutorial liegen Callback-Funktion und die Funktion, die den Callback ausführen werden in ein- und demselben Programm. Das kann auch Sinn machen, ist aber nicht, was du willst.

Es ist schon spät, deswegen könnte ich etwas übersehen, aber du brauchst:

In deinem Hauptprogramm:
  • Die Funktion, welche die DLL aufrufen können soll
  • Eine Typ-Deklaration (z.B. type TFNProc = procedure(parameter1: Integer; parameter2: Double); stdcall deiner Funktion
  • Einen Aufruf einer Funktion der DLL in der Art "Hier, nimm und merke die Adresse meiner Callback-funktion um sie später aufzurufen"

In deiner DLL:
  • Die gleiche Typdeklaration TFNProc wie im Hauptprogramm
  • Eine Variable dieses Typs
  • Eine Funktion "Nimm eine TFNProc-Variable als Parameter und merke dir den Wert in einer Variable"
  • Den Mut und Willen, an die in der Variable gespeicherte Adresse zu springen. Müsste eigentlich schon mit "meineVariable(5, 3.12)" gehen.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Callback-Funktion erstellen?

  Alt 27. Mai 2013, 22:43
Ja, in diesem Tutorial liegen Callback-Funktion und die Funktion, die den Callback ausführen werden in ein- und demselben Programm. Das kann auch Sinn machen, ist aber nicht, was du willst.

Es ist schon spät, deswegen könnte ich etwas übersehen, aber du brauchst:

In deinem Hauptprogramm:
  • Die Funktion, welche die DLL aufrufen können soll
  • Eine Typ-Deklaration (z.B. type TFNProc = procedure(parameter1: Integer; parameter2: Double); stdcall deiner Funktion
  • Einen Aufruf einer Funktion der DLL in der Art "Hier, nimm und merke die Adresse meiner Callback-funktion um sie später aufzurufen"

In deiner DLL:
  • Die gleiche Typdeklaration TFNProc wie im Hauptprogramm
  • Eine Variable dieses Typs
  • Eine Funktion "Nimm eine TFNProc-Variable als Parameter und merke dir den Wert in einer Variable"
  • Den Mut und Willen, an die in der Variable gespeicherte Adresse zu springen. Müsste eigentlich schon mit "meineVariable(5, 3.12)" gehen.
Vielen Dank! Probiere ich jetzt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Callback-Funktion erstellen?

  Alt 27. Mai 2013, 23:15
Wieso braucht man eine Callback-Funktion in dem Hauptprogramm, wo die eigentliche Funktion deklariert ist?
Um einen Fortschritt zum Beispiel anzeigen zu können? Um in bestimmten Situationen mit dem Benutzer interagieren zu können? Da kann es beliebige Gründe geben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Callback-Funktion erstellen?

  Alt 28. Mai 2013, 00:25
So, jetzt habe ich es kapiert. Fur diejenige, die es auch nicht sofort verstanden haben: die Prozedur DoSomething aus Luckies Totorial deklariert man in der DLL wie jede andere Prozedur oder Funktion und exportiert. Dann lädt man die Funktion dynamisch in dem Hostprogramm und übergibt die Callback-Funktion als Parameter.

@Luckie, @Der schöne Günther
Vielen vielen Dank!

Was mir aufgefallen ist, dass der Aufruf der Callback-Funktion funktioniert gleich ob mit oder ohne "@" davor. Genau so in der DLL, wenn ich den Wert der Funktion-Variable setze.
Was ist dabei der Unterschied? Warum brauche ich "@"?

Geändert von romber (28. Mai 2013 um 01:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Callback-Funktion erstellen?

  Alt 28. Mai 2013, 11:05
Der Compiler "setzt" es wahrscheinlich automatisch davor, weil es erkennt, dass es ein Funktionszeiger ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Callback-Funktion erstellen?

  Alt 28. Mai 2013, 11:08
Super!
Nochmal vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:23 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