Condividi tramite


__unhook Parola chiave

Annulla l'associazione di un metodo del gestore da 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  __unhook(
   &SourceClass::EventMethod,
   source,
   &ReceiverClass::HandlerMethod
   [, receiver = this]
);

long  __unhook(
   interface,
   source
);

long  __unhook(
   source
);

Parametri

&SourceClass::EventMethod
Puntatore al metodo di evento da cui si annulla ilhook del 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 di cui non è stato eseguito ilhook dal ricevitore, 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, l'origine 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 scollegare da 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, __unhook si presuppone che la classe sia quella in 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 __unhook viene chiamata.

Utilizzo

Può essere usato in qualsiasi ambito di funzione, incluso main, all'esterno della classe ricevitore di eventi.

Osservazioni:

Usare la funzione __unhook intrinseca in un ricevitore di eventi per disassociare o "unhook" un metodo del gestore da un metodo di evento.

Esistono tre forme di __unhook. Nella maggior parte dei casi, è possibile utilizzare la prima tipologia (a quattro argomenti). È possibile utilizzare il secondo formato (a due argomenti) solo per un ricevitore di __unhook eventi COM, che annulla ilhook dell'intera interfaccia evento. È possibile utilizzare la terza tipologia (a un argomento) per eseguire l'unhook di tutti i delegati dall'origine specificata.

Un valore restituito diverso da zero indica che si è verificato un errore (gli eventi gestiti generano un'eccezione).

Se si chiama __unhook su un evento e un gestore eventi che non sono già agganciati, non avrà alcun effetto.

In fase di compilazione, il compilatore verifica l'esistenza dell'evento ed effettua il controllo del tipo di parametro con il gestore specificato.

È possibile chiamare __hook e __unhook fuori dal ricevitore di eventi, ad eccezione degli eventi COM.

Un'alternativa all'uso __unhook consiste nell'usare l'operatore -= .

Per informazioni sulla codifica degli eventi gestiti nella nuova sintassi, vedere evento.

Nota

Una classe o una struttura basata su template non può contenere eventi.

Esempio

Per esempi, vedere Gestione degli eventi in C++ nativo e gestione degli eventi in COM .

Vedi anche

Parole chiave
event_source
event_receiver
__event
__hook
__raise