建立處理常式方法與事件的關聯。
注意
原生 C++ 中的事件屬性與標準 C++ 不相容。 當您指定 /permissive- 一致性模式時,它們不會編譯。
語法
long __hook(
&SourceClass::EventMethod,
source,
&ReceiverClass::HandlerMethod
[, receiver = this]
);
long __hook(
interface,
source
);
參數
&SourceClass::EventMethod
您用於連結事件處理常式方法的事件方法指標:
原生 C++ 事件:
SourceClass是事件來源類別,而EventMethod是事件。COM 事件:
SourceClass是事件來源介面,而EventMethod是其中一個方法。受控事件:
SourceClass是事件來源類別,而EventMethod是事件。
interface
將連結至 receiver 的介面名稱,僅適用於 layout_dependent 屬性的 event_receiver 參數為 true 的 COM 事件接收器。
source
事件來源執行個體的指標。 根據 type 中指定的程式碼 event_receiver而定,source 可以是下列其中一種類型:
原生事件來源物件指標。
IUnknown型的指標 (COM 來源)。Managed 物件指標 (用於 Managed 事件)。
&ReceiverClass::HandlerMethod
要連結至事件的事件處理常式方法的指標。 處理常式會被指定為類別的方法或對相同類別的參考。 如果您未指定類別名稱,則 __hook 會假設該類別是從中呼叫它的類別。
原生 C++ 事件:
ReceiverClass是事件接收器類別,而HandlerMethod是處理常式。COM 事件:
ReceiverClass是事件接收器介面,而HandlerMethod是其中一個處理常式。受控事件:
ReceiverClass是事件接收器類別,而HandlerMethod是處理常式。
receiver
(選用) 事件接收器類別執行個體的指標。 如果您未指定接收器,則預設值是呼叫 __hook 所在的接收器類別或結構。
使用方式
可以在事件接收器類別之外的任何函式範圍中使用,包括 main。
備註
在事件接收器中使用內建函式 __hook 關聯或連結處理常式方法與事件方法。 然後,當來源引發指定事件時,就會呼叫指定的處理常式。 您可以將數個處理常式連結至單一事件,也可以將數個事件連結至單一處理常式。
__hook 有兩種形式。 在大多數情況下,您可以使用第一種 (四個引數) 形式,特別是對於在其中 屬性的 event_receiver 參數為 false 的 COM 事件接收器。
在這些情況下,您在其中一個方法上引發事件之前,不需要連結介面中的所有方法。 您只需要連結處理事件的方法。 您只能將 __hook 的第二種 (二個引數) 形式用於 COM 事件接收器,其中 layout_dependent= true。
__hook 會傳回長數值。 非零傳回值表示已發生錯誤 (Managed 事件擲回例外狀況)。
編譯器會檢查事件是否存在,以及事件簽章與委派簽章是否一致。
您可以在事件接收器外部呼叫 __hook 和 __unhook,但 COM 事件除外。
使用 __hook 的替代方式是使用 += 運算子。
如需新語法中編碼受控事件的相關資訊,請參閱 event。
注意
樣板類別或結構不能包含事件。
範例
如需範例,請參閱原生C++ 中的事件處理和 COM 中的事件處理。
另請參閱
關鍵字
事件處理
event_source
event_receiver
__event
__unhook
__raise