__unhook
Odłącza metodę obsługi od zdarzenia.
long __unhook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __unhook(
interface,
source
);
long __unhook(
source
);
Parametry
**&**SourceClass :: EventMethod
Wskaźnik do metody zdarzenia, z którego zostanie odpięta 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 odczepiona od 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 odczepić od zdarzenia.Program obsługi jest określony jako metoda klasy lub odwołanie do niej; jeśli nie zostanie określona nazwa klasy, metoda __unhook 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ę __unhook.
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 __unhook w odbiorniku zdarzeń, aby odłączyć lub "odpiąć" metodę obsługi od metody zdarzenia.
Istnieją trzy rodzaje metody __unhook.W większości przypadków można używać pierwszej formy (cztery argumenty).Drugiej formy (dwa argumenty) metody __unhook można użyć tylko dla odbiornika zdarzeń modelu COM; odpina to cały interfejs zdarzenia.Trzecia forma (jeden argument) służy do odpięcia wszystkich delegatów z określonego źródła.
Zwracana wartość różna od zera wskazuje, że wystąpił błąd (wydarzenia zarządzane spowodują zgłoszenie wyjątku).
Jeśli nastąpi wywołanie __unhook na zdarzeniu i programie obsługi zdarzeń, które nie są jeszcze podłączone, nie przyniesie ono żadnego efektu.
W czasie kompilacji, kompilator sprawdza czy zdarzenie istnieje i czy parametr przechodzi kontrolę typów z określonym programem obsługi.
Z wyjątkiem zdarzeń COM, __hook i __unhook mogą być wywołane poza odbiorcą zdarzeń.
Zamiast używać __unhook 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.