__hook
Associa un metodo del gestore a un evento.
long __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
source
);
Parametri
**&**SourceClass :: EventMethod
Puntatore al metodo di eventi cui associare il metodo del gestore eventi:Eventi C++ nativi: SourceClass è la classe dell'origine evento e EventMethod è l'evento.
Eventi COM: SourceClass è l'interfaccia dell'origine evento e EventMethod è uno dei relativi metodi.
Eventi gestiti: SourceClass è la classe dell'origine evento e EventMethod è l'evento.
interface
Il nome dell'interfaccia associato a receiver solo per i ricevitori di eventi COM in cui il parametro layout_dependent dell'attributo event_receiver è true.source
Puntatore a un'istanza dell'origine evento. A seconda del codice type specificato in event_receiver, source può essere uno dei seguenti elementi:Un puntatore a un oggetto di origine dell'evento nativo.
Un puntatore basato su IUnknown (origine COM).
Un puntatore a un oggetto gestito (per gli eventi gestiti).
**&**ReceiverClass :: HandlerMethod
Puntatore al metodo del gestore eventi da associare a un evento. Il gestore viene specificato come metodo di una classe o come un riferimento alla stessa; se non si specifica il nome della classe, __hook presuppone che la classe sia la stessa nella quale viene chiamato.Eventi C++ nativi: ReceiverClass è la classe del ricevitore di eventi e HandlerMethod è il gestore.
Eventi COM: ReceiverClass è l'interfaccia del ricevitore di eventi e HandlerMethod è uno dei relativi gestori.
Eventi gestiti: ReceiverClass è la classe del ricevitore di eventi e HandlerMethod è il gestore.
receiver(facoltativo)
Puntatore a un'istanza della classe del ricevitore di eventi. Se non si specifica un ricevitore, l'impostazione predefinita corrisponde alla classe del ricevitore o alla struttura in cui viene chiamato __hook.
Utilizzo
Può essere utilizzato in qualunque ambito della funzione, incluso il principale, all'esterno della classe del ricevitore di eventi.
Note
Utilizzare la funzione intrinseca __hook in un ricevitore di eventi per associare o dissociare un metodo del gestore con un metodo dell'evento. Il gestore specificato viene quindi chiamato quando l'origine genera l'evento specificato. È possibile associare più gestori a un singolo evento o associare più eventi a un singolo gestore.
Esistono due tipologie di __hook. È possibile utilizzare la prima tipologia (a quattro argomenti) nella maggior parte dei casi, in particolare, per i ricevitori di eventi COM in cui il parametro " layout_dependent dell'attributo event_receiver è false.
In questi casi non è necessario associare tutti i metodi in un'interfaccia prima di generare un evento a uno dei metodi; solo il metodo che gestisce l'evento deve essere associato. È possibile utilizzare la seconda tipologia (a due argomenti) di __hook solo per i ricevitori di eventi COM in cui layout_dependent**=true**.
__hook restituisce un valore long. Un valore restituito diverso da zero indica che si è verificato un errore (gli eventi gestiti generano un'eccezione).
Il compilatore controlla l'esistenza di un evento e che la firma dell'evento coincida con la firma del delegato.
Ad eccezione degli eventi COM, è possibile chiamare __hook e __unhook all'esterno del ricevitore di eventi.
Un'alternativa all'utilizzo di __hook consiste nell'utilizzare l'operatore +=.
Per informazioni sulla codifica di eventi gestiti con la nuova sintassi, vedere evento (Estensioni del componente C++).
Nota
Una classe o una struttura basata su template non può contenere eventi.
Esempio
Per consultare degli esempi, vedere Gestione di eventi in C++ nativo e Gestione di eventi in COM.