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

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

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

Параметры

Function-attr-список

Указывает ноль или более атрибутов, которые применяются к функции. Допустимые атрибуты функции — [ Local ] ; атрибут указателя [ ref ] , [ UNIQUE ] или [ ptr ] ; и атрибут использования [ строка ] , [ Ignore ] и [ Контекстный _ маркер ] . Несколько атрибутов разделяются запятыми.

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

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

декларатор указателя

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

имя функции

Задает имя удаленной процедуры.

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

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

declarator

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

Remarks

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

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

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

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

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

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

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

Примеры

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

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

массивы

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

const

Контекстный _ маркер

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

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

обращать

Языковые

/осф

ref

указатель

Строка

struct

union

однозначно

рпкканцелсреад