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);