Palabra clave __hook

Asocia un método de control a un evento.

Nota:

Los atributos de eventos en C++ nativo no son compatibles con C++ estándar. No se compilan al especificar el modo de conformidad /permissive-.

Sintaxis

long __hook(
    &SourceClass::EventMethod,
    source,
    &ReceiverClass::HandlerMethod
    [, receiver = this]
);

long __hook(
    interface,
    source
);

Parámetros

&SourceClass::EventMethod
Un puntero al método de evento al que se enlaza el método de controlador de eventos:

  • Eventos de C++ nativo: SourceClass es la clase de origen del evento y EventMethod es el evento.

  • Eventos COM: SourceClass es la interfaz de origen del evento y EventMethod es uno de sus métodos.

  • Eventos administrados: SourceClass es la clase de origen del evento y EventMethod es el evento.

interface
El nombre de interfaz que se va a enlazar a receiver, solo para los receptores de eventos COM en los que el parámetro layout_dependent del atributo event_receiver es true.

source
Un puntero a una instancia del origen de eventos. Dependiendo del código type especificado en event_receiver, source puede ser uno de estos tipos:

  • Un puntero nativo de objeto de origen de eventos.

  • Un puntero basado en IUnknown (origen COM).

  • Un puntero de objeto administrado (para eventos administrados).

&ReceiverClass::HandlerMethod
Un puntero al método de controlador de eventos que se a enlazar a un evento. El controlador se especifica como un método de una clase o una referencia a la misma. Si no especifica el nombre de clase, __hook asume que la clase es la desde la que se llama.

  • Eventos de C++ nativo: ReceiverClass es la clase del receptor de eventos y HandlerMethod es el controlador.

  • Eventos COM: ReceiverClass es la interfaz del receptor de eventos y HandlerMethod es uno de sus controladores.

  • Eventos administrados: ReceiverClass es la clase del receptor de eventos y HandlerMethod es el controlador.

receiver
(Opcional) Un puntero a una instancia de la clase del receptor de eventos. Si no se especifica un receptor, el valor predeterminado es la estructura o la clase del receptor en que se llama a __hook.

Uso

Se puede usar en cualquier ámbito de función, incluida main, fuera de la clase del receptor de eventos.

Comentarios

Utilice la función intrínseca __hook en un receptor de eventos para asociar o enlazar un método de controlador con un método de evento. Después se llama al controlador especificado cuando el origen provoca el evento especificado. Puede enlazar varios controladores a un único evento o enlazar varios eventos a un único controlador.

Hay dos formas de __hook. Puede usar el primer formulario (de cuatro argumentos) en la mayoría de los casos, concretamente, para los receptores de eventos COM en los que el parámetro layout_dependent del atributo event_receiver es false.

En estos casos no necesita enlazar todos los métodos en una interfaz antes de desencadenar un evento en uno de los métodos. Solo tiene que enlazar el método que controla el evento. Puede usar el segundo formulario (de dos argumentos) de __hook solo para un receptor de eventos COM en el que layout_dependent= true.

__hook devuelve un valor de tipo long. Un valor devuelto distinto de cero indica que se ha producido un error (los eventos administrados producirán una excepción).

El compilador comprueba la existencia de un evento y que la firma del evento coincida con la firma del delegado.

Puede llamar a __hook y __unhook fuera del receptor de eventos, excepto los eventos COM.

Una alternativa al uso de __hook es utilizar el operador +=.

Para obtener información sobre la codificación de eventos administrados en la nueva sintaxis, consulte event.

Nota:

Una estructura o clase basada en plantilla no puede contener eventos.

Ejemplo

Consulte Control de eventos en C++ nativo y Control de eventos en COM para ver ejemplos.

Consulte también

Palabras clave
Control de eventos
event_source
event_receiver
__event
__unhook
__raise