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

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

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

Параметры

function-attr-list

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

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

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

ptr-declarator

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

имя функции

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

attribute-list

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

declarator

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

Remarks

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

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

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

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

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

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

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

Примеры

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

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

Массивы

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

const

context_handle

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

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

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

Местных

/osf

Ref

ptr

строка

Структура

Союза

Уникальный

RpcCancelThread