atributo de devolución de llamada

El atributo [callback] declara una función de devolución de llamada estática que existe en el lado cliente de la aplicación distribuida. Las funciones de devolución de llamada proporcionan una manera de que el servidor ejecute código en el cliente.

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

Parámetros

function-attr-list

Especifica cero o más atributos que se aplican a la función. Los atributos de función válidos son [local]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [string], [ignore]y [context_handle]. Separe varios atributos con comas.

type-specifier

Especifica un base_type, una estructura, una unión, un tipo de enumeración o un identificador de tipo. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.

ptr-declarator

Especifica cero o más declaradores de puntero. Un declarador de puntero es el mismo que el declarador de puntero usado en C; se construye a partir del designador *, modificadores como far y el calificador const.

nombre de función

Especifica el nombre del procedimiento remoto.

attribute-list

Especifica cero o más atributos direccionales, atributos de campo, atributos de uso y atributos de puntero adecuados para el tipo de parámetro especificado. Separe varios atributos con comas.

declarator

Especifica un declarador de C estándar, como identificadores, declaradores de puntero y declaradores de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers. El identificador de nombre de parámetro es opcional.

Comentarios

La función [devolución de llamada] es útil cuando el servidor debe obtener información del cliente. Si se admitieron aplicaciones de servidor en Windows 3. x, el servidor podría realizar una llamada a un procedimiento remoto en Windows 3. servidor x para obtener la información necesaria. La función de devolución de llamada logra el mismo propósito y permite al servidor consultar al cliente para obtener información en el contexto de la llamada original.

Las devoluciones de llamada son casos especiales de llamadas remotas que se ejecutan como parte de un único subproceso. Se emite una devolución de llamada en el contexto de una llamada remota. Cualquier procedimiento remoto definido como parte de la misma interfaz que la función de devolución de llamada estática puede llamar a la función de devolución de llamada.

Es importante tener en cuenta que el uso de [devolución de llamada] no se recomienda en la programación de varios subprocesos. Como función de programación de un solo subproceso, no está equipado para admitir las demandas de seguridad que proporciona un entorno de varios subprocesos.

La función RpcCancelThread no se puede usar para cancelar una llamada que pueda enviar una devolución de llamada estática. Si una llamada a procedimiento remoto determinado nunca dará lugar a una devolución de llamada, se puede cancelar. De lo contrario, solo se puede cancelar una llamada si se puede garantizar que no se haya emitido una devolución de llamada para ella.

Solo las secuencias de protocolo local y orientadas a la conexión admiten el atributo de devolución de llamada. El tamaño de los datos [out] de las devoluciones de llamada a través de la secuencia de protocolo local está limitado a 150 bytes. Si una interfaz RPC usa una secuencia de protocolo sin conexión (datagrama), se producirá un error en las llamadas a procedimientos con el atributo de devolución de llamada.

Los identificadores no se pueden usar como parámetros en las funciones de devolución de llamada. Dado que las devoluciones de llamada siempre se ejecutan en el contexto de una llamada, el identificador de enlace usado por el cliente para realizar la llamada al servidor también se usa como identificador de enlace del servidor al cliente.

Las devoluciones de llamada pueden anidar en cualquier profundidad.

Ejemplos

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

Vea también

Matrices

Tipos base MIDL

const

context_handle

Enum

Archivo de definición de interfaz (IDL)

Ignorar

Local

/Osf

Ref

Ptr

Cadena

Estructura

union

Único

RpcCancelThread