__hook
Parola chiave
Associa un metodo del gestore a un evento.
Nota
Gli attributi di evento in C++ nativi non sono compatibili con C++Standard. Non vengono compilati quando si specifica la /permissive-
modalità di conformità.
Sintassi
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 di origine evento edEventMethod
è l'evento.Eventi COM:
SourceClass
è l'interfaccia dell'origine evento edEventMethod
è uno dei relativi metodi.Eventi gestiti:
SourceClass
è la classe di origine evento edEventMethod
è l'evento.
interface
Nome dell'interfaccia associato a receiver
, solo per i ricevitori di eventi COM in cui il layout_dependent
parametro 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 di questi tipi:
Un puntatore a un oggetto di origine dell'evento nativo.
Puntatore
IUnknown
basato su 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 riferimento allo stesso oggetto . Se non si specifica il nome della classe, __hook
si presuppone che la classe sia quella da cui viene chiamata.
Eventi C++ nativi:
ReceiverClass
è la classe ricevitore di eventi edHandlerMethod
è il gestore.Eventi COM:
ReceiverClass
è l'interfaccia del ricevitore di eventi edHandlerMethod
è uno dei relativi gestori.Eventi gestiti:
ReceiverClass
è la classe ricevitore di eventi edHandlerMethod
è il gestore.
receiver
(Facoltativo) Puntatore a un'istanza della classe ricevitore di eventi. Se non si specifica un ricevitore, il valore predefinito è la classe o la struttura ricevitore in cui __hook
viene chiamata.
Utilizzo
Può essere utilizzato in qualunque ambito della funzione, incluso il principale, all'esterno della classe del ricevitore di eventi.
Osservazioni:
Usare la funzione __hook
intrinseca in un ricevitore di eventi per associare o associare un metodo del gestore a un metodo di 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 forme di __hook
. È possibile utilizzare il primo modulo (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 attivare un evento su uno dei metodi. È sufficiente associare il metodo che gestisce l'evento. È possibile utilizzare il secondo formato (due argomenti) solo per un ricevitore di __hook
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.
È possibile chiamare __hook
e __unhook
fuori dal ricevitore di eventi, ad eccezione degli eventi COM.
Un'alternativa all'uso __hook
consiste nell'usare l'operatore +=.
Per informazioni sulla codifica degli eventi gestiti nella nuova sintassi, vedere event
.
Nota
Una classe o una struttura basata su template non può contenere eventi.
Esempio
Per esempi, vedere Gestione degli eventi in C++ nativo ed Eventi in COM .
Vedi anche
Parole chiave
Gestione degli eventi
event_source
event_receiver
__event
__unhook
__raise
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per