Атрибут handle

Атрибут [handle] задает определяемый пользователем или настраиваемый тип дескриптора.

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

Параметры

Typename

Указывает имя определяемого пользователем типа дескриптора привязки.

Remarks

Определяемые пользователем дескрипторы позволяют разработчикам разрабатывать дескрипторы, значимые для приложения. Определяемый пользователем дескриптор может быть определен только в объявлении типа, а не в деклараторе функции.

Параметр типа, определенного атрибутом [handle], используется для определения привязки для вызова и передается в вызываемую процедуру.

Пользователь должен предоставить процедуры привязки и отмены привязки для преобразования между примитивами и определяемыми пользователем типами дескрипторов. Учитывая определяемый пользователем дескриптор типа typename, пользователь должен предоставить подпрограммы typename_bind и typename_unbind. Например, если определяемый пользователем тип дескриптора называется MYHANDLE, подпрограммы называются MYHANDLE_bind и MYHANDLE_unbind.

В случае успешного выполнения подпрограмма typename_bind должна возвращать допустимый дескриптор примитивной привязки. В случае неудачи подпрограмма должна возвращать значение NULL. Если подпрограмма возвращает значение NULL, подпрограмма typename_unbind не будет вызвана. Если подпрограмма привязки возвращает недопустимый дескриптор привязки, отличный от NULL, поведение заглушки не определено.

Если удаленная процедура имеет определяемый пользователем дескриптор в качестве параметра или неявного дескриптора, клиент вызывает подпрограмму привязки перед вызовом удаленной процедуры. Заглушки клиента вызывают подпрограмму отмены привязки после удаленного вызова.

В IDL DCE параметр с атрибутом [handle] должен отображаться как первый параметр в списке аргументов удаленной процедуры. Последующие параметры, включая другие атрибуты [handle], рассматриваются как обычные параметры. Корпорация Майкрософт поддерживает расширение для IDL DCE, которое позволяет пользовательский параметр [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