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 yEventMethod
es el evento.Eventos COM:
SourceClass
es la interfaz de origen del evento yEventMethod
es uno de sus métodos.Eventos administrados:
SourceClass
es la clase de origen del evento yEventMethod
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 yHandlerMethod
es el controlador.Eventos COM:
ReceiverClass
es la interfaz del receptor de eventos yHandlerMethod
es uno de sus controladores.Eventos administrados:
ReceiverClass
es la clase del receptor de eventos yHandlerMethod
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 la segunda forma (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