共用方式為


__unhook 關鍵詞

將處理程式方法與事件解除關聯。

注意

原生 C++ 中的事件屬性與標準 C++ 不相容。 當您指定 /permissive- 一致性模式時,它們不會編譯。

語法

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

long  __unhook(
   interface,
   source
);

long  __unhook(
   source
);

參數

&SourceClass::EventMethod
從中取消叫用事件處理程式方法的事件方法指標:

  • 原生 C++ 事件:SourceClass 是事件來源類別,而 EventMethod 是事件。

  • COM 事件:SourceClass 是事件來源介面,而 EventMethod 是其中一個方法。

  • 受控事件:SourceClass 是事件來源類別,而 EventMethod 是事件。

interface
從接收者取消叫true

source
事件來源執行個體的指標。 根據 中指定的type程式代碼event_receiver來源可以是下列其中一種類型:

  • 原生事件來源物件指標。

  • IUnknown 型的指標 (COM 來源)。

  • Managed 物件指標 (用於 Managed 事件)。

&ReceiverClass::HandlerMethod 要從事件取消擷取之事件處理程式方法的指標。 處理程式指定為類別的方法或相同之參考;如果您未指定類別名稱, __unhook 則假設類別是其呼叫所在的類別。

  • 原生 C++ 事件:ReceiverClass 是事件接收器類別,而 HandlerMethod 是處理常式。

  • COM 事件:ReceiverClass 是事件接收器介面,而 HandlerMethod 是其中一個處理常式。

  • 受控事件:ReceiverClass 是事件接收器類別,而 HandlerMethod 是處理常式。

receiver (選擇性)事件接收器類別實例的指標。 如果您未指定接收器,則預設值是呼叫 __unhook 所在的接收器類別或結構。

使用方式

可用於任何函式範圍,包括 main事件接收器類別外部的 。

備註

使用事件接收器中的內建函 __unhook 式,將處理程式方法與事件方法解除關聯或「取消hook」。

有三種 __unhook形式。 大部分情況下可以使用第一種 (四個引數) 形式。 您可以只針對 COM 事件接收器使用第二個 (two-argument) 形式 __unhook ;它會取消呼叫整個事件介面。 您可以使用第三種 (單一引數) 形式從指定的來源解除所有委派的連結。

非零的傳回值表示發生錯誤 (Managed 事件將會擲回例外狀況)。

如果您在尚未連結的事件和事件處理程式上呼叫 __unhook ,則不會有任何作用。

在編譯時期,編譯器會驗證事件是否存在,並且對指定的處理常式進行參數類型檢查使。

您可以在事件接收器外部呼叫 __hook__unhook,但 COM 事件除外。

使用 __unhook 的替代方法是使用 -= 運算符。

如需以新語法撰寫 Managed 事件程式代碼的相關信息,請參閱 事件

注意

樣板類別或結構不能包含事件。

範例

如需範例,請參閱 COM 中的原生C++事件處理和事件處理。

另請參閱

關鍵字
event_source
event_receiver
__event
__hook
__raise