程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++事宜處置中的__hook與__unhook用法詳解

C++事宜處置中的__hook與__unhook用法詳解

編輯:關於C++

C++事宜處置中的__hook與__unhook用法詳解。本站提示廣大學習愛好者:(C++事宜處置中的__hook與__unhook用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++事宜處置中的__hook與__unhook用法詳解正文


__hook
__hook將處置法式辦法與事宜聯系關系。
語法

  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 的接口稱號,僅實用於 COM 事宜吸收器,個中 event_receiver 特征的 layout_dependent 參數為 true。
source
指向事宜源的實例的指針。依據 event_receiver 中指定的代碼 type,source 可為以下項之一:
本機事宜源對象指針。
基於 IUnknown 的指針(COM 源)。
托管對象指針(針對托管事宜)。
&ReceiverClass::HandlerMethod
指向要掛鉤到事宜的事宜處置法式辦法的指針。處置法式將指定為類的辦法或對統一辦法的援用;假如不指定類稱號,則 __hook 假定該類是從中挪用它的類。
本機 C++ 事宜:ReceiverClass 是事宜吸收器類,HandlerMethod 是處置法式。
COM 事宜:ReceiverClass 是事宜吸收器接口,HandlerMethod 是其處置法式之一。
托管事宜:ReceiverClass 是事宜吸收器類,HandlerMethod 是處置法式。
receiver(可選)
指向事宜吸收器類的實例的指針。假如不指定吸收器,則默許為在個中挪用 __hook 的吸收器類或構造。
用法
可以在事宜吸收器類的內部的任何函數規模(包含 main)中應用。
備注
請應用事宜吸收器中的外部函數 __hook 將處置法式辦法與事宜辦法聯系關系或掛鉤。隨後會在源激發指定事宜時挪用指定的事宜處置法式。可以將多個處置法式掛鉤到單個事宜,或將多個事宜掛鉤到單個處置法式。
__hook 有兩種情勢。年夜多半情形下,可使用第一種(四個形參)情勢,詳細而言,就是針對個中的 event_receiver 特征的 layout_dependent 參數是 false 的 COM 事宜吸收器。
在這些情形下,當在個中一個辦法上激起事宜前,不須要在接口中掛鉤一切辦法;只需掛鉤處置事宜的辦法。可以只對 layout_dependent=true 的 COM 事宜吸收器應用第二種(二個形參)情勢的 __hook。
__hook 將前往一個長值。非零前往值表現產生了毛病(托管事宜激發了異常)。
編譯器將檢討能否存在事宜和事宜簽名能否與拜托簽名分歧。
除 COM 事宜外,可以在事宜吸收器的內部挪用 __hook 和 __unhook。
應用 __hook 的替換辦法是應用 += 運算符。
留意
模板類或構造不克不及包括事宜。

__unhook
撤消處置法式辦法與事宜的聯系關系。
語法

   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
將從 receiver 中消除掛鉤的接口稱號,僅實用於 COM 事宜吸收器,個中 event_receiver 特征的 layout_dependent 參數為 true。
source
指向事宜源的實例的指針。依據 event_receiver 中指定的代碼 type,source 可為以下項之一:
本機事宜源對象指針。
基於 IUnknown 的指針(COM 源)。
托管對象指針(針對托管事宜)。
&ReceiverClass::HandlerMethod
指向要從事宜中消除掛鉤的事宜處置法式辦法的指針。處置法式將指定為類的辦法或對統一辦法的援用;假如不指定類稱號,則 __unhook 假定該類是從中挪用它的類。
本機 C++ 事宜:ReceiverClass 是事宜吸收器類,HandlerMethod 是處置法式。
COM 事宜:ReceiverClass 是事宜吸收器接口,HandlerMethod 是其處置法式之一。
托管事宜:ReceiverClass 是事宜吸收器類,HandlerMethod 是處置法式。
receiver(可選)
指向事宜吸收器類的實例的指針。假如不指定吸收器,則默許為在個中挪用 __unhook 的吸收器類或構造。
用法
可以在事宜吸收器類的內部的任何函數規模(包含 main)中應用。
備注
應用事宜吸收器中的外部函數 __unhook 撤消處置法式辦法與事宜辦法的聯系關系或從事宜辦法“消除掛鉤”處置法式辦法。
__unhook 有三種情勢。在年夜多半情形下,可使用第一種 (four-argument) 情勢。只能為 COM 事宜吸收器應用 __unhook 的第二種 (two-argument) 情勢;這將消除掛鉤全部事宜接口。可使用第三種 (one-argument) 情勢從指定的源中消除掛鉤一切拜托。
非零前往值指導已產生毛病(托管事宜將激發異常)。
假如對還沒有掛鉤的事宜和事宜處置法式挪用 __unhook,它將不起感化。
在編譯時,編譯器將驗證事宜能否存在,並應用指定的處置法式履行參數類型檢討。
除 COM 事宜外,可以在事宜吸收器的內部挪用 __hook 和 __unhook。
作為應用 __unhook 的替換方法,可使用 -= 運算符。
有關新語法中編碼托管事宜的信息,請參閱event(C++ 組件擴大)。
留意
模板類或構造不克不及包括事宜。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved