Condividi tramite


__unhook

Dissocia un metodo per la gestione di un evento.

long  __unhook(
   &SourceClass::EventMethod,
   source,
   &ReceiverClass::HandlerMethod
   [, receiver = this] 
);
long  __unhook( 
   interface,
   source
);
long  __unhook(
   source 
);

Parametri

  • &SourceClass::EventMethod
    Un puntatore al metodo dell'evento da cui sganciate il metodo del gestore eventi:

    • Eventi nativi C++: SourceClass è la classe di origine evento e EventMethod è.

    • Eventi COM: SourceClass rappresenta l'interfaccia di origine evento e EventMethod è uno dei metodi.

    • eventi gestiti: SourceClass è la classe di origine evento e EventMethod è.

  • interface
    Il nome dell'interfaccia che è sganciato da receiver, solo per i ricevitori di eventi COM in cui layout_dependent parametro di event_receiver l'attributo è true.

  • source
    Un puntatore a un'istanza dell'origine evento.A seconda del codice type originati event_receiver, database di origine può essere:

    • Un puntatore all'oggetto nativo di origine evento.

    • IUnknownpuntatore basato (origine COM.

    • Un puntatore all'oggetto gestito (per gli eventi gestiti).

  • &Receiverassembly::HandlerMethod
    Un puntatore al metodo del gestore eventi da sganciare da un evento.Il gestore viene specificato come metodo di una classe o di riferimento allo stesso; se non si specifica il nome della classe, __unhook presuppone che la classe sia quella in cui viene chiamato.

    • Eventi nativi C++: Receiverassembly è la classe del ricevitore di eventi e HandlerMethod è il gestore.

    • Eventi COM: Receiverassembly è l'interfaccia ricevitore di eventi e HandlerMethod è uno dei propri gestori.

    • eventi gestiti: Receiverassembly è la classe del ricevitore di eventi e HandlerMethod è il gestore.

  • receiver(facoltativo)
    Un puntatore a un'istanza della classe del ricevitore di eventi.Se non si specifica un ricevitore, l'impostazione predefinita è la classe o la struttura del ricevitore in cui __unhook viene chiamato.

Utilizzo

È possibile utilizzare in qualsiasi ambito della funzione, incluso l'oggetto principale, all'esterno della classe del ricevitore di eventi.

Note

utilizzare la funzione intrinseca __unhook in un ricevitore di eventi da dissociare o “sganciare„ un metodo del gestore da un metodo di evento.

Esistono tre forme di __unhook.È possibile utilizzare il primo form (dell'quattro-argomento) nella maggior parte dei casi.È possibile utilizzare il secondo formato (a due argomenti) di __unhook solo per un ricevitore di eventi COM, si disconnette l'intera interfaccia eventi.È possibile utilizzare il terzo form (dell'un-argomento) per sganciare tutti i delegati dall'origine specificata.

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

Se si chiama __unhook in un evento e un gestore eventi che non vengono agganciati, non avrà effetto.

In fase di compilazione, il compilatore verifica che l'evento esista e sia il tipo di parametro che controlla con il gestore specificato.

Ad eccezione degli eventi COM, __hook e __unhook può essere chiamato all'esterno del ricevitore di eventi.

Un'alternativa all'utilizzo __unhook è utilizzare - = operatore.

Per informazioni sugli eventi gestiti codifica nella nuova sintassi, vedere evento (Visual C++).

[!NOTA]

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

Esempio

vedere Gestione degli eventi in C++ nativo e Gestione degli eventi in COM per gli esempi.

Vedere anche

Riferimenti

Parole chiave C++

event_source

event_receiver

__event

__hook

__raise