context_handle_noserialize属性
[context_handle_noserialize] ACF 属性は、アプリケーションの既定の動作に関係なく、コンテキスト ハンドルがシリアル化されないように保証します。
typedef [context_handle_noserialize [ , type-acf-attribute-list ] ] context-handle-type
[context_handle_noserialize [, function-acf-attribute-list ] ] function-name( );
function-name ( [context_handle_noserialize
[ , parameter-acf-attribute-list ] ] param-name );
パラメーター
-
type-acf-attribute-list
-
型に適用されるその他の ACF 属性。
-
context-handle-type
-
typedef 宣言で定義されているコンテキスト ハンドル型を指定する識別子。 これは、IDL ファイルで [context_handle] 属性を受け取る型です。
-
function-acf-attribute-list
-
関数に適用される追加の ACF 属性。
-
function-name
-
IDL ファイルで定義されている関数の名前。
-
parameter-acf-attribute-list
-
パラメーターに適用されるその他の ACF 属性。
-
param-name
-
IDL ファイルで定義されているパラメーターの名前。
解説
[context_handle] 属性は、リモート プロシージャ 呼び出しの間にサーバー上のコンテキスト (状態情報) を保持するバインディング ハンドルを識別します。 属性は、IDL typedef 型属性、関数戻り値型属性、またはパラメーター属性として表示できます。
既定では、コンテキスト ハンドルの呼び出しはシリアル化されます。 アプリケーションは RpcSsDontSerializeContext を呼び出して、この既定の動作をオーバーライドできます。 ACF ファイルで [context_handle] 属性を使用すると、呼び出し元のアプリケーションの動作に関係なく、この特定のコンテキスト ハンドルの呼び出しがシリアル化されないことが保証されます。 コンテキスト ランダウン ルーチンの指定は省略可能です。
この属性は MIDL バージョン 5.0 で使用できます。
Windows Server 2003 および Windows XP 以降: 1 つのインターフェイスは、シリアル化されたコンテキスト ハンドルと非シリアル化されたコンテキスト ハンドルの両方に対応でき、インターフェイス上の 1 つのメソッドが排他的に (シリアル化された) コンテキスト ハンドルにアクセスできるのに対し、他のメソッドは共有モード (非シリアル化) でそのコンテキスト ハンドルにアクセスできます。 これらのアクセス機能は、読み取り/書き込みロックメカニズムに相当します。シリアル化されたコンテキスト ハンドルを使用するメソッドは排他的ユーザー (ライター) ですが、非シリアル化されたコンテキスト ハンドルを使用するメソッドは共有ユーザー (リーダー) です。 コンテキスト ハンドルの状態を破棄または変更するメソッドはシリアル化する必要があります。 コンテキスト ハンドルの状態を変更しないメソッド (単にコンテキスト ハンドルから読み取るメソッドなど) は、非正規化できます。 作成方法は暗黙的にシリアル化されることに注意してください。
例
typedef [context_handle_noserialize] PCONTEXT_HANDLE_TYPE;
HRESULT RemoteFunc([context_handle_noserialize] pCxHandle);
関連項目