Condividi tramite


__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 ed EventMethod è l'evento.

  • Eventi COM: SourceClass è l'interfaccia dell'origine evento ed EventMethod è uno dei relativi metodi.

  • Eventi gestiti: SourceClass è la classe di origine evento ed EventMethod è 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 IUnknownbasato 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 ed HandlerMethod è il gestore.

  • Eventi COM: ReceiverClass è l'interfaccia del ricevitore di eventi ed HandlerMethod è uno dei relativi gestori.

  • Eventi gestiti: ReceiverClass è la classe ricevitore di eventi ed HandlerMethod è 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