атрибут 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);
См. также раздел