__hook Słowa kluczowego

Kojarzy metodę obsługi ze zdarzeniem.

Uwaga

Atrybuty zdarzeń w natywnym języku C++ są niezgodne z językiem Standard C++. Nie są one kompilowane podczas określania /permissive- trybu zgodności.

Składnia

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

long __hook(
    interface,
    source
);

Parametry

&SourceClass::EventMethod
Wskaźnik do metody zdarzenia, do której jest podłączana metoda obsługi zdarzeń:

  • Natywne zdarzenia języka C++: SourceClass jest klasą źródła zdarzeń i EventMethod jest zdarzeniem.

  • Zdarzenia COM: SourceClass to interfejs źródła zdarzeń i EventMethod jest jedną z jego metod.

  • Zdarzenia zarządzane: SourceClass jest klasą źródła zdarzeń i EventMethod jest zdarzeniem.

interface
Nazwa interfejsu jest podłączona do receivermetody , tylko dla odbiorników zdarzeń COM, w których layout_dependent parametr atrybutu event_receiver to true.

source
Wskaźnik do wystąpienia źródła zdarzeń. W zależności od kodu type określonego w sourceevent_receiverpliku może być jednym z następujących typów:

  • Natywny wskaźnik obiektu źródła zdarzeń.

  • Wskaźnik IUnknownoparty na modelu (źródło COM).

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

&ReceiverClass::HandlerMethod
Wskaźnik do metody obsługi zdarzeń, która ma zostać podłączona do zdarzenia. Procedura obsługi jest określana jako metoda klasy lub odwołanie do tej samej klasy. Jeśli nie określisz nazwy klasy, przyjmij, __hook że klasa jest wywoływana z.

  • Natywne zdarzenia języka C++: ReceiverClass jest klasą odbiornika zdarzeń i HandlerMethod jest procedurą obsługi.

  • Zdarzenia COM: ReceiverClass to interfejs odbiorcy zdarzeń i HandlerMethod jest jednym z jego programów obsługi.

  • Zdarzenia zarządzane: ReceiverClass jest klasą odbiorcy zdarzeń i HandlerMethod jest procedurą obsługi.

receiver
(Opcjonalnie) Wskaźnik do wystąpienia klasy odbiorcy zdarzeń. Jeśli nie określisz odbiornika, wartością domyślną jest klasa odbiorcy lub struktura, w której __hook jest wywoływana.

Użycie

Może być używany w dowolnym zakresie funkcji, w tym głównym, poza klasą odbiorcy zdarzeń.

Uwagi

Użyj funkcji __hook wewnętrznej w odbiorniku zdarzeń, aby skojarzyć lub podłączyć metodę obsługi z metodą zdarzenia. Określona procedura obsługi jest następnie wywoływana, gdy źródło zgłasza określone zdarzenie. Możesz podłączyć kilka programów obsługi do pojedynczego zdarzenia lub podłączyć kilka zdarzeń do pojedynczej procedury obsługi.

Istnieją dwie formy .__hook W większości przypadków można użyć pierwszego (czterech argumentów) formularza, w szczególności dla odbiorników zdarzeń COM, w których parametr event_receiver layout_dependent atrybutu to false.

W takich przypadkach nie trzeba podłączać wszystkich metod w interfejsie przed uruchomieniem zdarzenia na jednej z metod. Wystarczy podłączyć metodę obsługi zdarzenia. Można użyć drugiej (dwóch argumentów __hook ) formy tylko dla odbiornika zdarzeń COM, w którym layout_dependent= true.

__hook zwraca wartość długą. Wartość niezerowa wskazuje, że wystąpił błąd (zdarzenia zarządzane zgłaszają wyjątek).

Kompilator sprawdza istnienie zdarzenia i że podpis zdarzenia zgadza się z podpisem delegowanym.

Można wywoływać __hook i __unhook spoza odbiornika zdarzeń, z wyjątkiem zdarzeń COM.

Alternatywą do użycia __hook jest użycie operatora +=.

Aby uzyskać informacje na temat kodowania zdarzeń zarządzanych w nowej składni, zobacz event.

Uwaga

Klasa lub struktura szablonu nie może zawierać zdarzeń.

Przykład

Zobacz Obsługa zdarzeń w natywnym języku C++ i obsługa zdarzeń w modelu COM , aby uzyskać przykłady.

Zobacz też

Słowa kluczowe
Obsługa zdarzeń
event_source
event_receiver
__event
__unhook
__raise