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


Атрибут обратного вызова

Атрибут [callback] объявляет статическую функцию обратного вызова, которая существует на стороне клиента распределенного приложения. Функции обратного вызова предоставляют серверу способ выполнения кода на клиенте.

[callback [ , function-attr-list] ] type-specifier [ptr-declarator] function-name(
        [ [attribute-list] ] type-specifier [declarator]
        , ...);

Параметры

function-attr-list

Задает ноль или несколько атрибутов, применяемых к функции. Допустимые атрибуты функции : [local]; атрибут указателя [ссылка], [уникальный], или [ptr]; и атрибуты использования [string], [ignore] и [context_handle]. Разделяйте несколько атрибутов запятыми.

описатель типа

Указывает base_type, структуру, объединение, тип перечисления или идентификатор типа. Необязательная спецификация хранилища может предшествовать спецификатору типа.

ptr-declarator

Указывает ноль или более деклараторов указателей. Декларатор указателя совпадает с декларатором указателя, используемым в C; он создается на основе конструктора *, модификаторов, таких как far, и квалификатора const.

имя функции

Указывает имя удаленной процедуры.

список атрибутов

Указывает ноль или более направленных атрибутов, атрибутов полей, атрибутов использования и атрибутов указателя, подходящих для указанного типа параметра. Разделяйте несколько атрибутов запятыми.

declarator

Задает стандартный декларатор C, например идентификаторы, деклараторы указателей и деклараторы массива. Дополнительные сведения см. в статье Атрибуты массива и Sized-Pointer, массивы и указатели. Идентификатор parameter-name является необязательным.

Комментарии

Функция [обратный вызов] полезна, когда сервер должен получать сведения от клиента. Если серверные приложения поддерживались в Windows 3. x, сервер может выполнить вызов удаленной процедуры в Windows 3. x server для получения необходимых сведений. Функция обратного вызова выполняет ту же задачу и позволяет серверу запрашивать у клиента сведения в контексте исходного вызова.

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

Важно отметить, что при программировании с несколькими потоками не рекомендуется использовать [обратный вызов]. Как однопоточная функция программирования, она не оснащена для поддержки требований безопасности, которые предоставляет многопоточная среда.

Функция RpcCancelThread не может использоваться для отмены вызова, который может отправлять статический обратный вызов. Если определенный удаленный вызов процедуры никогда не приведет к обратному вызову, его можно отменить. В противном случае вызов можно отменить, только если можно гарантировать, что обратный вызов для него не был выполнен.

Атрибут обратного вызова поддерживают только последовательности, ориентированные на подключение и локальные протоколы. Размер данных [out] для обратных вызовов по локальному протоколу ограничен 150 байтами. Если интерфейс RPC использует последовательность протокола без подключения (datagram), вызовы процедур с атрибутом обратного вызова завершатся ошибкой.

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

Обратные вызовы могут вложиться в любую глубину.

Примеры

[callback] HRESULT DisplayString([in, string] char * p1);

См. также раздел

Массивы

Базовые типы MIDL

const

context_handle

Перечисления

Файл определения интерфейса (IDL)

Игнорировать

Местных

/Osf

Ref

Ptr

строка

Структура

union

Уникальный

RpcCancelThread