Sdílet prostřednictvím


__unhook

Odpojí metodu obslužné rutiny od události.

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

Parametry

  • **&**SourceClass :: EventMethod
    Ukazatel na metodu události, od které se odpojí metoda obslužné rutiny události:

    • Nativní události jazyka C++: SourceClass je zdrojová třída události a EventMethod je událost.

    • Události modelu COM: SourceClass je zdrojové rozhraní události a EventMethod je jedním z jeho metod.

    • Spravované události: SourceClass je zdrojová třída události a EventMethod je událost.

  • interface
    Název rozhraní odpojeného od receiver, pouze u přijímačů událostí modelu COM, ve kterých má parametr layout_dependent atributu event_receiver hodnotu true.

  • zdroj
    Ukazatel na instanci zdroje události.V závislosti na kódu může type zadaný v event_receiver, source může nabývat následujících parametrů:

    • Ukazatel objektu zdroje nativní události.

    • Ukazatel založený na rozhraní IUnknown (prostředek modelu COM).

    • Ukazatel spravovaného objektu (pro spravované události).

  • **&**ReceiverClass :: HandlerMethod
    Ukazatel na metodu obslužné rutiny události určený pro odpojení od události.Obslužná rutina je zadána jako metoda třídy nebo odkazu na to samé. Není-li zadán název třídy, předpokládá __unhook, že je to třída, ze které je volán.

    • Nativní události jazyka C++: ReceiverClass je přijímač událostí třídy a HandlerMethod je obslužná rutina.

    • Události modelu COM: ReceiverClass je rozhraní přijímače události a HandlerMethod je jedním z jeho obslužných rutin.

    • Spravované události: ReceiverClass je přijímač událostí třídy a HandlerMethod je obslužná rutina.

  • receiver(volitelné)
    Ukazatel na instanci třídy příjemce události.Není-li přijímač zadán, je výchozí hodnota třída přijímače nebo struktura, v níž je volána funkce __unhook.

Použití

Je možné jej použít v jakémkoli rozsahu funkce včetně funkce main, mimo třídu příjemce události.

Poznámky

Pro odpojení metody obslužné rutiny od metody události je možné použít vnitřní funkci __unhook.

Existují tři tvary funkce __unhook.Ve většině případů lze použít první tvar (čtyři argumenty).Druhý tvar (dva argumenty) funkce __unhook lze použít pouze pro příjemce události modelu COM, což odpojí celé rozhraní události.Třetí tvar (jeden argument) lze použít k odpojení všech delegátů ze zadaného zdroje.

Nenulová návratová hodnota označuje, že došlo k chybě (spravované události vyvolají výjimku).

Pokud zavoláte funkci __unhook na události a obslužné rutině události, které ještě nejsou připojeny, nebude to mít žádný účinek.

V době kompilace kompilátor ověří, zda událost existuje a provede kontroly typu parametrů se zadanou obslužnou rutinou.

S výjimkou událostí modelu COM lze funkce __hook a __unhook volat mimo příjemce událostí.

Alternativou k používání funkce __unhook je použití operátoru -=.

Informace o spravovaných událostech kódování v nové syntaxi naleznete v tématu event (rozšíření komponent C++).

[!POZNÁMKA]

Třída šablony nebo struktura nemohou obsahovat události.

Příklad

Příklady naleznete v tématech Zpracování událostí v nativním kódu C++ a Zpracování událostí v modelu COM.

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

event_source

event_receiver

__event

__hook

__raise