コールバック関数は、事前に登録しておき、その後必要に応じて呼ばれる関数のことである。

通常、関数やプロシージャなどは、プログラム内のコードから呼び出され実行される。一例としてsin()、Math.sin()
などの三角関数は、print sin(pi)などのようにプログラム内で記述が現れた際に実行される。
一般的な関数は、すべて手続きに従って呼び出され実行される。

これに対して、コールバック関数は通常の手続きの流れとは異なり、関数がプログラム内部の
主としたフロー内から呼ばれないものの事を指す。

コールバック関数は、与えられた関数名を予め登録しておき、主たる処理のフローとは個別に、
何らかの処理が必要になった場合に、システムによって呼び出される。
この仕組みは割り込みなどの仕組みに応用出来る。

コールバック関数は、言語上、明確に区別されるものではなく、外部から何らかの関数が呼び出される
性質を持つ関数について言い、特にWinodws環境において表現する事が多い。
コールバック関数は、Windows環境のWin32APIを利用する際に良く現れる。


Windowsでは、メッセージのやり取りによって、各イベントがおこる。
このとき、受け取ったメッセージを処理するのがウインドウプロシージャである。
これは次のような図で考えると分かりやすい


コールバック関数
Sub Call()
MessageBox(0,"",0,0)
End Sub

Sub test(callbackfunc As *Sub())
callbackfunc()
End Sub

test(AddressOf(Call))


この例では、test()はコールバック登録と呼び出しが行われている。実際には登録と実行は区別される。
Call()は呼び出される関数で、Call()がコールバック関数に該当する。

添付ファイル