Поделиться через


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