handle 属性

[handle] 属性は、ユーザー定義または "カスタマイズされた" ハンドルの種類を指定します。

typedef [handle] typename;  
handle_t __RPC_USER typename_bind (typename);
void __RPC_USER typename_unbind (typename, handle_t);

パラメーター

typename

ユーザー定義のバインド ハンドル型の名前を指定します。

解説

ユーザー定義ハンドルを使用すると、開発者はアプリケーションにとって意味のあるハンドルを設計できます。 ユーザー定義ハンドルは、関数宣言子ではなく、型宣言でのみ定義できます。

[handle] 属性によって定義された型のパラメーターは、呼び出しのバインドを決定するために使用され、呼び出されたプロシージャに送信されます。

ユーザーは、プリミティブハンドル型とユーザー定義ハンドル型の間で変換するために、バインドルーチンとバインド解除ルーチンを提供する必要があります。 typename 型のユーザー定義ハンドルを指定すると、ユーザーはルーチン typename_bindtypename_unbind を指定する必要があります。 たとえば、ユーザー定義ハンドル型の名前が MYHANDLE の場合、ルーチンには MYHANDLE_bind および MYHANDLE_unbind という名前が付けられます。

成功した場合、 typename_bind ルーチンは有効なプリミティブ バインド ハンドルを返す必要があります。 失敗した場合、ルーチンは NULL を返す必要があります。 ルーチンが NULL を返す場合、 typename_unbind ルーチンは呼び出されません。 バインド ルーチンが NULL とは異なる無効なバインド ハンドルを返す場合、スタブ動作は未定義です。

リモート プロシージャにパラメーターまたは暗黙的ハンドルとしてユーザー定義ハンドルがある場合、クライアント スタブはリモート プロシージャを呼び出す前にバインディング ルーチンを呼び出します。 クライアント スタブは、リモート呼び出しの後にバインド解除ルーチンを呼び出します。

DCE IDL では、[handle] 属性を持つパラメーターが、リモート プロシージャ引数リストの最初のパラメーターとして表示される必要があります。 他の [handle] 属性を含む後続のパラメーターは、通常のパラメーターとして扱われます。 Microsoft では、DCE IDL の拡張機能をサポートしています。これにより、ユーザー定義の [handle] パラメーターを最初のパラメーター以外の位置に表示できます。

typedef [handle] struct 
{ 
    char machine[8]; 
    char nmpipe[256]; 
} h_service; 
 
handle_t __RPC_USER h_service_bind(h_service); 
void __RPC_USER h_service_unbind(h_service, handle_t);

関連項目

バインドとハンドル

インターフェイス定義 (IDL) ファイル

implicit_handle

Typedef