Callback: Unterschied zwischen den Versionen
I0n0s (Diskussion | Beiträge) K (→Konzept: Rechtschreibfehler verbessert) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
(4 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
==Konzept== | ==Konzept== | ||
− | Normalerweise ist ein Funktionsaufruf bereits | + | Normalerweise ist ein Funktionsaufruf bereits während dem Linken bekannt. Das Programm weiß also schon, wo es hinspringen soll. |
− | Beim Entwerfen von Librarys ist es aber hin und wieder notwendig | + | Beim Entwerfen von Librarys ist es aber hin und wieder notwendig dem Nutzer freizustellen, wo das Programm weiter abgearbeitet werden soll. Das wird über Callbacks/Funktionspointer gelöst. Anstatt einen althergebrachten Funktionsaufruf zu benutzen wird also ein Zeiger auf eine Funktion gesetzt. Während der Laufzeit kann diesem Pointer ein anderer Wert zugewiesen werden, mit der Folge, dass beim nächsten Aufruf dieser Funktion das Programm an eine andere Stelle springt. |
==Beispiele== | ==Beispiele== | ||
− | Das gängigste Beispiel sind GUI Klassen. Borland z.B. baut bei der VCL und CLX auf Funktionszeiger bei allen Ereignissen. Möchte man z.B. | + | Das gängigste Beispiel sind GUI Klassen. Borland z.B. baut bei der VCL und CLX auf Funktionszeiger bei allen Ereignissen. Möchte man z.B. während der Laufzeit das Verhalten eines Buttons ändern kann man dies per |
− | <pascal>Btn.OnClick := zeigerAufOnClickFunktion;</ | + | <source lang="pascal">Btn.OnClick := zeigerAufOnClickFunktion;</source> machen. |
Ein weiteres Beispiel für Callbacks ist die "sort" Funktion bei TList. Siehe dazu die Delphihilfe. | Ein weiteres Beispiel für Callbacks ist die "sort" Funktion bei TList. Siehe dazu die Delphihilfe. | ||
− | Callbacks werden z.B. auch bei der [[GLUT]] verwendet. Dort existieren | + | Callbacks werden z.B. auch bei der [[GLUT]] verwendet. Dort existieren Callbacks für viele verschiedene Funktionen wie z.B. die standard Zeichenfunktion, oder die Mausbehandlungsfunktion. Durch den Callbackansatz kann der Programmierer, der diese Bibiothek nutzt, einfach eine eigene Funktion schreiben (welche den selben Funktionskopf besitzt) und dem Programm mitteilen, dass beim Aufruf von Callback XYZ genau dieser Code ausgeführt werden soll. |
==Siehe Auch== | ==Siehe Auch== | ||
− | [http://www.newty.de/fpt/index.html Tutorial zum Thema "function pointer" und "Callbacks" für C/C++ {{Englisch}} | + | {|border=0 |
+ | |[http://www.newty.de/fpt/index.html Tutorial zum Thema "function pointer" und "Callbacks" für C/C++] || {{Englisch}} | ||
+ | |} |
Aktuelle Version vom 10. März 2009, 19:03 Uhr
Callbacks sind Zeiger auf Funktionen
Konzept
Normalerweise ist ein Funktionsaufruf bereits während dem Linken bekannt. Das Programm weiß also schon, wo es hinspringen soll.
Beim Entwerfen von Librarys ist es aber hin und wieder notwendig dem Nutzer freizustellen, wo das Programm weiter abgearbeitet werden soll. Das wird über Callbacks/Funktionspointer gelöst. Anstatt einen althergebrachten Funktionsaufruf zu benutzen wird also ein Zeiger auf eine Funktion gesetzt. Während der Laufzeit kann diesem Pointer ein anderer Wert zugewiesen werden, mit der Folge, dass beim nächsten Aufruf dieser Funktion das Programm an eine andere Stelle springt.
Beispiele
Das gängigste Beispiel sind GUI Klassen. Borland z.B. baut bei der VCL und CLX auf Funktionszeiger bei allen Ereignissen. Möchte man z.B. während der Laufzeit das Verhalten eines Buttons ändern kann man dies per
Btn.OnClick := zeigerAufOnClickFunktion;
Ein weiteres Beispiel für Callbacks ist die "sort" Funktion bei TList. Siehe dazu die Delphihilfe.
Callbacks werden z.B. auch bei der GLUT verwendet. Dort existieren Callbacks für viele verschiedene Funktionen wie z.B. die standard Zeichenfunktion, oder die Mausbehandlungsfunktion. Durch den Callbackansatz kann der Programmierer, der diese Bibiothek nutzt, einfach eine eigene Funktion schreiben (welche den selben Funktionskopf besitzt) und dem Programm mitteilen, dass beim Aufruf von Callback XYZ genau dieser Code ausgeführt werden soll.
Siehe Auch
Tutorial zum Thema "function pointer" und "Callbacks" für C/C++ |