コールバック関数とその使用法
1 コールバック関数の概要
コールバック関数とは、呼び出し元がオブジェクト(ここでいうオブジェクトとはOOPやグローバル関数などのオブジェクトを指します)の初期化時にいくつかのパラメータをオブジェクトに渡し、同時に呼び出し元がアクセスできる関数も渡す仕組みです。アドレスがオブジェクトに渡されます。この関数は呼び出し元と呼び出し先の間の通知合意であり、合意されたイベントが発生すると、呼び出し先 (通常は作業スレッドを含む) がコールバック関数のアドレスに従って関数を呼び出します。
このように、呼び出し元は 1 つのスレッドに存在し、呼び出し先は別のスレッドに存在します。メッセージ: メッセージは、ハンドルとメッセージ番号も初期化中に呼び出し側から呼び出し側に渡されるため、ある形式のコールバックとみなすこともできます。合意されたイベントが発生すると、呼び出し側は呼び出し側にメッセージを送信します。
このように、呼び出し元はメインスレッドに存在し、呼び出し先はメインスレッドまたはワーカースレッドに存在します。 Delphi イベント モデル:
Delphi の VCL には、TForm の OnCreate イベントなど、イベント モデルを使用するビジュアル コンポーネントが多数あります。原則として、設計時にイベント関数を指定し、実行時にイベントがトリガーされると、設計時に指定されたイベント関数が呼び出されます。 。 機械的には、Delphi イベント モデルはコールバックと同じです。ただし、特定の形式ではいくつかの違いがあります。純粋なコールバック関数はグローバル関数の形式ですが、Delphi イベントはオブジェクト メソッドの形式です。つまり、次のコールバック関数タイプを定義できます。 TCallBackFunc = オブジェクトの PRocedure (pData: ポインタ);
2 コールバック関数の使用手順
コールバック関数は主に 2 つの状況で使用されます。1 つは、一部の Windows API がパラメーター アドレスとしてコールバック関数を必要とする場合であり、もう 1 つは、特定の機会にユーザーが定義した関数がそのパラメーターとしてコールバック関数を必要とする場合です。ユーザー定義関数の場合、通常、ダイナミック リンク ライブラリ内の関数を呼び出すときに使用されます。コールバック関数を使用するには、いくつかの主な手順があります。 1. コールバック関数タイプの定義は、一般的な関数プロセスの定義と変わりませんが、その定義は必要に応じてコールバック関数の関数要件を満たす必要があるという点だけが異なります。 in 関数またはプロシージャの定義の後には、それが Windows 標準呼び出しであるという宣言を続ける必要があります。たとえば、プロシージャの宣言の場合は typeTHDFunction= function(I:integer;s:string):integer; となります。 THDProcedure=プロシージャ(s:文字列); stdcall;2. 次に、このプロトタイプに基づいて、対応する関数またはプロセスを定義します。この関数またはプロセスの名前には、定義されたコールバックと完全に一致する必要はありません。プロシージャの場合は、同じパラメータ型である必要があります。例:上記の機能と処理のプロトタイプを基に、対応する機能と処理を定義します。関数プロトタイプ定義: Function HdFunExample(k:integer,sExam:string):stdcall; プロセス定義:procedure HdProExample(sExam:string);stdcall; 3. このコールバック関数またはプロシージャをプログラムに実装します。整数,sExam:文字列):整数;開始終了;プロシージャHdProExample(sExam:string);stdcall;beginend; 4. 呼び出しプロセス; コールバック関数は、通常、呼び出し関数のプロトタイプに従って、次の呼び出しがあるとします。関数: function DyHdFunExample(HdFun:THDFunction;I: 整数):boolean;呼び出し側関数では、関数ポインターを処理することでコールバック関数を直接呼び出すことができます (つまり、呼び出し側関数のパラメーターはコールバック関数の型パラメーターであり、直接操作されます)。これにより、コールバック関数は特定の操作を実行します。つまり、コールバック関数の機能は呼び出し元の関数に実装されます。呼び出し: varI:integer;beginI:=DyHdFunExample(@HdFunExample,i);//…….End;
3 例
サンプル プログラムは、ディレクトリ H:/callback function Examples/ の下にあります。コールバック関数は主に Windows の元の API 関数で使用されますが、ユーザー定義の呼び出し関数は通常、ダイナミック リンク ライブラリに配置されます。通常、同じプロジェクト内でコールバック関数を使用する必要はありません。 (個人的な感想です)...