Microsoft RPC Binding-Handle Extensions
IDL 言語に対する Microsoft 拡張機能では、最初の左端のパラメーター以外の位置に表示される複数のハンドル パラメーターがサポートされています。 次の手順では、MIDL コンパイラが DCE 互換モード (/osf)、および既定 (Microsoft 拡張) モードでバインド ハンドル パラメーターを解決するために実行するシーケンスについて説明します。
DCE 互換モード
- 最初の位置に表示されるバインド ハンドル。
- 左端の [in, context_handle] パラメーター。
- [implicit_handle] または [auto_handle] で指定された暗黙的なバインド ハンドル。
- ACF が存在しない場合、既定では [auto_handle] が使用されます。
既定モード
- 左端の明示的なバインド ハンドル。
- [implicit_handle] または [auto_handle] で指定された暗黙的なバインド ハンドル。
- ACF が存在しない場合、既定では [auto_handle] が使用されます。
DCE IDL コンパイラは、明示的なバインド ハンドルを最初のパラメーターとして検索します。 最初のパラメーターがバインド ハンドルではなく、1 つ以上のコンテキスト ハンドルが指定されている場合、左端のコンテキスト ハンドルがバインド ハンドルとして使用されます。 最初のパラメーターがハンドルではなく、コンテキスト ハンドルがない場合、プロシージャは ACF 属性 [implicit_handle] または [auto_handle] を使用して暗黙的なバインディングを使用します。
IDL に対する Microsoft 拡張機能を使用すると、バインド ハンドルを最初のパラメーター以外の位置に配置できます。 左端の [in] explicit-handle パラメーターは、プリミティブ、プログラマ定義、またはコンテキスト ハンドルのいずれであるかに関係なく、バインド ハンドルです。 ハンドル パラメーターがない場合、プロシージャは ACF 属性 [implicit_handle] または [auto_handle] を使用して暗黙的なバインディングを使用します。
次の規則は、DCE 互換 (/osf) モードと既定モードの両方に適用されます。
- 自動ハンドル バインドは、ACF が存在しない場合に使用されます。
- 個々の関数の明示的な [in] または [in, out] ハンドルは、インターフェイスに指定された暗黙的なバインディングを優先します。
- 複数の [in] または [in, out] プリミティブ ハンドルはサポートされていません。
- 複数の [in] または [in, out] 明示的なコンテキスト ハンドルが許可されます。
- バインディング ハンドル パラメーターを除くすべてのプログラマ定義ハンドル パラメーターは、読み取り可能なデータとして扱われます。
次の表に例を示し、各コンパイラ モードでバインド ハンドルを割り当てる方法について説明します。
例 | 説明 |
---|---|
|
明示的なハンドルは指定されません。 [ implicit_handle] または [ auto_handle] で指定された暗黙的なバインド ハンドルが使用されます。 ACF が存在しない場合は、自動ハンドルが使用されます。 |
|
handle_t型の明示的なハンドルを指定します。 パラメーター H は、プロシージャのバインド ハンドルです。 |
|
最初のパラメーターはハンドルではありません。 既定モードでは、左端の handle パラメーター H がバインド ハンドルです。 /osf モードでは、暗黙的なバインディングが使用されます。 2 番目のパラメーターが読み取り可能であると予想され、handle_tを送信できないため、エラーが報告されます。 |
|
最初のパラメーターはハンドルではありません。 既定モードでは、左端の handle パラメーター H がバインド ハンドルです。 スタブは、ユーザーが指定したルーチンMY_HDL_bind呼び出し、MY_HDL_unbindします。 In/osf モードでは、暗黙的なバインディングが使用されます。 プログラマー定義のハンドル・パラメーター H は、トランスミシブル・データとして扱われます。 |
|
最初のパラメーターはバインド ハンドルです。 パラメーター H はバインド ハンドル パラメーターです。 2 番目のプログラマ定義のハンドル パラメーターは、読み取り可能なデータとして扱われます。 |
|
バインディング ハンドルはコンテキスト ハンドルです。 パラメーター H はバインド ハンドルです。 |