__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
是它的其中一種方法。Managed 事件:
SourceClass
是事件來源類別,而EventMethod
是 事件。
interface
從接收者取消叫 用介面名稱,僅適用于屬性的 layout_dependent 參數 event_receiver
為 true
的 COM 事件接收器 。
source
事件來源執行個體的指標。 根據 中指定的 event_receiver
程式碼 type
, 來源 可以是下列其中一種類型:
原生事件來源物件指標。
IUnknown
型指標 (COM 來源)。Managed 物件指標 (用於 Managed 事件)。
&ReceiverClass::HandlerMethod
要從事件取消擷取之事件處理常式方法的指標。 處理常式指定為類別的方法或相同之參考;如果您未指定類別名稱, __unhook
則假設類別是其呼叫所在的類別。
原生 C++ 事件:
ReceiverClass
是事件接收器類別,而且HandlerMethod
是處理常式。COM 事件:
ReceiverClass
是事件接收器介面,而且HandlerMethod
是它的其中一個處理常式。Managed 事件:
ReceiverClass
是事件接收器類別,而HandlerMethod
是處理常式。
receiver
(選擇性)事件接收器類別實例的指標。 如果您未指定接收者,則預設值為呼叫的 __unhook
接收者類別或結構。
使用方式
可用於任何函式範圍,包括 main
事件接收器類別外部的 。
備註
使用事件接收器中的內建函 __unhook
式,將處理常式方法與事件方法解除關聯或「取消hook」。
有三種 __unhook
形式。 大部分情況下可以使用第一種 (四個引數) 形式。 您可以只針對 COM 事件接收器使用第二個 (two-argument) 形式 __unhook
;它會取消呼叫整個事件介面。 您可以使用第三種 (單一引數) 形式從指定的來源解除所有委派的連結。
非零的傳回值表示發生錯誤 (Managed 事件將會擲回例外狀況)。
如果您在尚未連結的事件和事件處理常式上呼叫 __unhook
,則不會有任何作用。
在編譯時期,編譯器會驗證事件是否存在,並且對指定的處理常式進行參數類型檢查使。
您可以呼叫 __hook
事件接收器以外的 __unhook
事件接收器,但 COM 事件除外。
使用 __unhook
的替代方法是使用 -= 運算子。
如需以新語法撰寫 Managed 事件程式碼的相關資訊,請參閱 事件 。
注意
樣板類別或結構不能包含事件。
範例
如需範例,請參閱 原生 C++ 中的事件處理和 COM 中的事件處理。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應