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