callback 属性
[callback] 属性は、分散アプリケーションのクライアント側に存在する静的コールバック関数を宣言します。 コールバック関数は、サーバーがクライアントでコードを実行する方法を提供します。
[callback [ , function-attr-list] ] type-specifier [ptr-declarator] function-name(
[ [attribute-list] ] type-specifier [declarator]
, ...);
パラメーター
-
function-attr-list
-
関数に適用される 0 個以上の属性を指定します。 有効な関数属性は [local];ポインター属性 [ref]、 [unique]、または [ptr];と usage 属性 [string]、 [ignore]、および [context_handle]。 複数の属性をコンマで区切ります。
-
type-specifier
-
base_type、構造体、共用体、列挙型、または型識別子を指定します。 省略可能なストレージ仕様は 、型指定子の前に置くことができます。
-
ptr-declarator
-
0 個以上のポインター宣言子を指定します。 ポインター宣言子は、C で使用されるポインター宣言子と同じです。これは、 * 指定子、 far などの修飾子、および修飾子 const から構築 されます。
-
function-name
-
リモート プロシージャの名前を指定します。
-
attribute-list
-
0 個以上の方向属性、フィールド属性、使用法属性、および指定したパラメーター型に適したポインター属性を指定します。 複数の属性をコンマで区切ります。
-
declarator
-
識別子、ポインター宣言子、配列宣言子などの標準 C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列、および 配列とポインター」を参照してください。 パラメーター名識別子は省略可能です。
解説
[callback] 関数は、サーバーがクライアントから情報を取得する必要がある場合に便利です。 Windows 3 でサーバー アプリケーションがサポートされていた場合。x サーバーは、Windows 3 でリモート プロシージャを呼び出す可能性があります。x サーバーで必要な情報を取得します。 コールバック関数は同じ目的を達成し、サーバーが元の呼び出しのコンテキストでクライアントに情報を照会できるようにします。
コールバックは、1 つのスレッドの一部として実行されるリモート呼び出しの特殊なケースです。 コールバックは、リモート呼び出しのコンテキストで発行されます。 静的コールバック関数と同じインターフェイスの一部として定義されているリモート プロシージャは、コールバック関数を呼び出すことができます。
マルチスレッド プログラミングでは、[callback] の使用は推奨されないことに注意してください。 シングルスレッド プログラミング関数として、マルチスレッド環境で提供されるセキュリティ要求をサポートする機能はありません。
RpcCancelThread 関数を使用して、静的コールバックをディスパッチする可能性がある呼び出しを取り消すことはできません。 特定のリモート プロシージャ呼び出しでコールバックが発生しない場合は、取り消すことができます。 それ以外の場合は、コールバックが発行されていないことを保証できる場合にのみ、呼び出しを取り消すことができます。
コールバック属性をサポートするのは、接続指向シーケンスとローカル プロトコル シーケンスのみです。 ローカル プロトコル シーケンスに対するコールバックの [出力] データのサイズは、150 バイトに制限されています。 RPC インターフェイスでコネクションレス (データグラム) プロトコル シーケンスが使用されている場合、コールバック属性を使用したプロシージャの呼び出しは失敗します。
コールバック関数では、ハンドルをパラメーターとして使用できません。 コールバックは常に呼び出しのコンテキストで実行されるため、サーバーへの呼び出しを行うためにクライアントが使用するバインド ハンドルは、サーバーからクライアントへのバインド ハンドルとしても使用されます。
コールバックは、任意の深さに入れ子にすることができます。
例
[callback] HRESULT DisplayString([in, string] char * p1);
関連項目