handle 属性
[handle] 属性は、ユーザー定義または "カスタマイズされた" ハンドルの種類を指定します。
typedef [handle] typename;
handle_t __RPC_USER typename_bind (typename);
void __RPC_USER typename_unbind (typename, handle_t);
-
typename
-
ユーザー定義のバインド ハンドル型の名前を指定します。
ユーザー定義ハンドルを使用すると、開発者はアプリケーションにとって意味のあるハンドルを設計できます。 ユーザー定義ハンドルは、関数宣言子ではなく、型宣言でのみ定義できます。
[handle] 属性によって定義された型のパラメーターは、呼び出しのバインドを決定するために使用され、呼び出されたプロシージャに送信されます。
ユーザーは、プリミティブハンドル型とユーザー定義ハンドル型の間で変換するために、バインドルーチンとバインド解除ルーチンを提供する必要があります。 typename 型のユーザー定義ハンドルを指定すると、ユーザーはルーチン typename_bind と typename_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);