__hook
Přidruží metodu obslužné rutiny k události.
long __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
source
);
Parametry
**&**SourceClass :: EventMethod
Ukazatel na metodu události, ke které se připojí 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í připojeného k 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 připojení k 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á __hook, ž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 __hook.
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 přidružení nebo připojení metody obslužné rutiny k metodě události je možné použít vnitřní funkci __hook.Zadaná obslužná rutina je následně volána při vyvolání zadané události zdrojem.Je možné připojit několik obslužných rutin k jedné události nebo připojit několik událostí k jediné obslužné rutině.
Existují dvě formy __hook.První formu (se čtyřmi argumenty) lze použít ve většině případů, konkrétně u přijímačů událostí modelu COM, ve kterých je parametr layout_dependent atributu event_receiver nastaven na hodnotu false.
V těchto případech není před aktivaci události na jedné z metod nutné připojit všechny metody v rozhraní. Připojena musí být pouze metoda zpracování události.Druhou formu (se dvěma argumenty) funkce __hook lze použít pouze pro příjemce události modelu COM, ve kterém layout_dependent**= true,**.
__hook vrátí hodnotu typu long.Nenulová návratová hodnota označuje, že došlo k chybě (spravované události vyvolaly výjimku).
Kompilátor zkontroluje existenci události a zda souhlasí podpis události s podpisem delegáta.
S výjimkou události COM lze __hook a __unhook volat mimo přijímač událostí.
Alternativou k používání __hook 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 Zpracování událostí v nativním kódu C++ a v Zpracování událostí v modelu COM.