Sdílet prostřednictvím


__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.

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

Zpracování událostí

event_source

event_receiver

__unhook

__raise