![]() |
Was ist eine Callback Funktion
Also ich kenne sie und benutze sie auch zum Beispiel bei EnumWindows. Aber wie funktioniert eine Callback Funktion eigentlioch genau. Ich habe da mal was geschrieben:
Delphi-Quellcode:
Wäre das eine Callback Funktion oder habe ich da was falsch verstanden und wenn ja, wie geht es richtig?
type
TCallBack = function(i: Integer): Boolean; stdcall; function CallBack(i: Integer): Boolean; stdcall; begin ShowMessage(IntToStr(i)); end; procedure DoSomething(cb: TCallBack); var i: Integer; begin if Assigned(cb) then begin for i := 0 to 9 do CallBack(i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin DoSomething(CallBack); end; |
Re: Was ist eine Callback Funktion
Jo is schon so fast richtig.
Bei APIs hast du eigentlich nur einen Pointer, d.h. es sieht in etwa so aus:
Delphi-Quellcode:
function CallBack(i: Integer): Boolean; stdcall; begin ShowMessage(IntToStr(i)); end; procedure DoSomething(cb: Pointer); stdcall; //das wäre die API var i: Integer; CallBack: function(i: Integer): Boolean; stdcall; begin if Assigned(cb) then begin @CallBack := cb; for i := 0 to 9 do CallBack(i); end; end; procedure TForm1.Button1Click(Sender: TObject); begin DoSomething(@CallBack); // aufruf der API mit der callback funtion als pointer end; |
Re: Was ist eine Callback Funktion
Eine Callback-Funktion ist eine Funktion, die du sozusagen uebergeben kannst. Nehmen wir an, deine Callback-Funktion heisst CB(), deine andere Funktion foo(). Callback bedeutet nun, dass du foo() aufrufst und deine Callback-Funktion uebergibst. foo() wird dann irgendwann deine Callback-Funktion mit vorbestimmten Parametern aufrufen. Deine Funktion macht dann was und gibt irgendwas zurueck. Dies wird wiederum von foo() verwendet.
Das nur um mal eine trockene Erklaerung zu bringen :lol: Greetz alcaeus |
Re: Was ist eine Callback Funktion
Danke Jungs, wieder was gelernt.
@brechi: Jupp, das sieht schon eher richtig aus. ;) Wann setzt man denn eigentlich eine Callback Funktion ein? Also ich würde sie einsetzen, wenn ich eigentlich ein dynamisches Array zurückgeben müsste, dies aber nicht will oder kann. Stattdessen übergebe ich eine Funktion, der ich dann die Elemente einzeln übergebe und der Nutzer sie dann in der Callback Funktion selber weiterverarbeiten kann. Wäre das ein Einatzgebiet? Zum Beispiel habe ich in MpuNTUser.pas eine Funktion EnumUsers, die alle Benutzer in einem dynamischen Array zurückgibt, dort könnte ich ja dann eine Callback Funktion nutzen, um das dynamische Array zu vermeiden. Richtig? |
Re: Was ist eine Callback Funktion
Zitat:
Ein weiteres häufiges Einsatzgebiet ist die Prüfung auf Abbruch, z.B. bei einem Druck- oder Kopierdialog. Dadurch ermöglich man zum einen ein "ProcessMessages" (die Aktualisierung des Fensters), zum anderen hat der User halt auch die Möglichkeit des Abbruchs, ohne dass deine Implementierung der Druck- oder Kopierfunktion über die Details Bescheid wissen muss. |
Re: Was ist eine Callback Funktion
OK. Gut. Allerdings wie das mit dem Abbrechen funktionieren soll, habe ich jetzt nicht ganz verstanden. Hättest du da etwas Beispiel Code zur Demonstration zur Hand?
Ich drohe an dieser Stelle schon mal mit meinem nächsten Artikel. :mrgreen: |
Re: Was ist eine Callback Funktion
Zitat:
|
Re: Was ist eine Callback Funktion
Du bist etwas spät dran sniper_w. ;)
|
Re: Was ist eine Callback Funktion
Zitat:
Ein anderes Beispiel finde ich jetzt gerade nicht, wobei ich eigentlich noch irgendwas mit Kopieren im Kopf habe... |
Re: Was ist eine Callback Funktion
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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