Udostępnij za pośrednictwem


__hook

Skojarzenie metody obsługi z zdarzeniem.

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

Parametry

  • **&**SourceClass :: EventMethod
    Wskaźnik do metody zdarzenia, do którego zostanie podłączona metoda obsługi zdarzeń:

    • Zdarzenia natywne C++: SourceClass jest klasą źródła zdarzenia, a EventMethod jest zdarzeniem.

    • Zdarzenia modelu COM: SourceClass jest interfejsem źródła zdarzenia, a EventMethod jest jedną z jego metod.

    • Zdarzenia zarządzane: SourceClass jest klasą źródła zdarzenia, a EventMethod jest zdarzeniem.

  • interface
    Nazwa interfejsu zostaje podłączona do receiver, tylko dla odbiorców zdarzeń COM, w których parametr layout_dependent atrybutu event_receiver ma wartość true.

  • source
    Wskaźnik wystąpienia źródła zdarzenia.Zależnie od kodu type określonego w event_receiver, source może być jednym z następujących:

    • Wskaźnikiem obiektu natywnego źródła zdarzenia.

    • Wskaźnikiem opartym na IUnknown (źródło COM).

    • Wskaźnikiem obiektu zarządzanego (dla zarządzanych zdarzeń).

  • **&**ReceiverClass :: HandlerMethod
    Wskaźnik metody obsługi zdarzenia należy podłączyć do zdarzenia.Program obsługi jest określony jako metoda klasy lub odwołanie do niej; jeśli nie zostanie określona nazwa klasy, metoda __hook zakłada, że klasa jest tą, w której jest wywoływana.

    • Zdarzenia natywne C++: ReceiverClass jest klasą odbiorcy zdarzeń, a HandlerMethod jest programem obsługi.

    • Zdarzenia modelu COM: ReceiverClass jest interfejsem odbiorcy zdarzeń, a HandlerMethod jest jednym z jego programów obsługi.

    • Zdarzenia zarządzane: ReceiverClass jest klasą odbiorcy zdarzeń, a HandlerMethod jest programem obsługi.

  • receiver(opcjonalnie)
    Wskaźnik do wystąpienia klasy odbiornika zdarzeń.Jeśli odbiorca nie jest określony, domyślnie jest to odbiornik klasy lub struktury, w której wywołuje się __hook.

Użycie

Może być użyty w dowolnym zakresie funkcji, również w głównym, poza klasą odbiornika zdarzeń.

Uwagi

Należy użyć funkcji wewnętrznej __hook w odbiorniku zdarzeń, aby skojarzyć lub podłączyć metodę obsługi do metody zdarzenia.Określony program obsługi jest następnie wywoływany, kiedy źródło zwiększa określone zdarzenie.Można podłączyć kilka programów do obsługi pojedynczego zdarzenia lub podłączyć kilka zdarzeń do pojedynczego programu obsługi.

Istnieją dwie formy __hook.W większości przypadków można używać pierwszej formy (cztery argumenty), w szczególności dla odbiorcy zdarzeń COM, w której parametr layout_dependent atrybutu event_receiver jest false.

W tych przypadkach nie trzeba podłączać wszystkich metod w interfejsie przed wyzwalaniem zdarzenia na jednej z metod; metoda obsługi zdarzeń musi być podłączona.Można użyć drugiej formy (dwa argumenty) __hook tylko dla odbiorcy zdarzeń modelu COM, w której layout_dependent**= true**.

__hook zwraca wartość typu long.Zwracana wartość różna od zera wskazuje, że wystąpił błąd (wydarzenia zarządzane zgłoszą wyjątek).

Kompilator sprawdza istnienie zdarzenia i sprawdza, czy podpis zdarzenia zgadza się z podpisem delegata.

Z wyjątkiem zdarzeń COM, __hook i __unhook mogą być wywołane poza odbiorcą zdarzeń.

Zamiast używać __hook można użyć operatora +=.

Aby uzyskać informacje na temat kodowania zarządzanych zdarzeń w nowej składni, zobacz Zdarzenie (Visual C++).

[!UWAGA]

Oparte na szablonach klasy lub struktury nie mogą zawierać zdarzeń.

Przykład

Zobacz Obsługa zdarzeń w natywnym kodzie C++ i Obsługa zdarzeń w modelu COM dla przykładów.

Zobacz też

Informacje

Słowa kluczowe języka C++

Obsługa zdarzeń

event_source

event_receiver

__unhook

__raise