成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Delphi XE中的動態Hook某些內部事件

開發 開發工具
今天我們講到的是Delphi XE中的RTTI增強,動態Hook某些內部事件。雖然Delphi有些遠離程序員的視線,但是我們應該重視這個曾經的霸主。

Delphi2010之后的RTTI做了很大休整,現在用起來很爽了哦。甚至可以獲取某些類的內部私有單元,然后為其賦值!講這個RTTI增強的,可以參考網上的多個博客內容,我列舉一下:

Delphi2010RTTI的增強

Delphi的Anymouse方法探秘

萬一的Rtti系列

我這里的主要目的是掛鉤某些內部私有事件,然后增加上一些自己的處理過程,這里我以TMenuItem的私有內部事件FOnChange作為例程。這個私有事件在菜單內部綁定,我們平常狀態下,在外部無法更改!但是XE之后這個問題不在存在,使用它的全新RTTI,可以很容易的獲得一個類對象的基本上所有的類的字段以及方法和屬性等。

  1. begin  rttiContext :TRttiContext.Create;     
  2. rtype :rttiContext.GetType(TMenuItem);    
  3. rField :rType.GetField('FOnChange');    
  4. if rField <> nil then  begin       
  5. :rField.GetValue(MainMenu1.Items);     
  6. OldMenuItemChangeCode :TValueData(V).FAsMethod.Code;       
  7. OldSelfData :TValuedata(V).FAsMethod.Data;       
  8. TValueData(V).FAsMethod.Code := @TForm1.MenuItemChange;//菜單項目變化       
  9. TValueData(V).FAsMethod.Data :self;       
  10. rField.SetValue(self.MainMenu1.Items,v);  end;  
  11.  

上面的代碼就設置了MainMenu的items的私有事件變量FOnChange的新指向地址為本窗體的實現代碼了,OldMenuItemChangeCode,OldSelfData是保存私有事件的原有方法指針和傳遞的Self指針對象。用來在我們替換后的對象中進行調用,不然原過程就不會被調用了。然后我們再來看看,新的FonChange的實現過程

  1. procedure TForm1.MenuItemChange(Sender: TObject; Source: TMenuItem;    
  2. Rebuild: Boolean);
  3. var  
  4. m: procedure(selfData: TObject;
  5. Sender: TObject; Source: TMenuItem;    
  6.  
  7. Rebuild: Boolean);  
  8. begin  
  9. if 
  10. Assigned(OldMenuItemChangeCode) then  
  11. begin    
  12. :OldMenuItemChangeCode;      
  13. m(OldSelfData,Sender,Source,Rebuild);    
  14. end;    
  15. ShowMessage('菜單修改事件掛鉤');end;  
  16.  

這個代碼中最主要的就是如何來調用原來的FOnChange的執行過程了,熟悉Delphi的人應該都知道了Delphi的對象過程中可以使用Self表示當前對象,而這個對象在對象過程中的傳遞是通過EAX傳遞的,而此時我們的新過程不是在MainMenu.Items的對象內部調用執行的,所以,我們需要顯示的傳遞SelfData作為源對象中的Self對象指針,所以我申明了一個指針過程如下:

  1. m: procedure(selfData: TObject;Sender: TObject; Source: TMenuItem;  
  2.   Rebuild: Boolean); 

原文鏈接: http://www.cnblogs.com/DxSoft/archive/2011/01/04/1925907.html

【編輯推薦】

  1. Delphi與C#之父:技術理想架構開發傳奇
  2. Delphi 2010初體驗:徹底告別內存泄露
  3. 開發熱點周報:Delphi 2010出爐 mixin進駐JavaFX
  4. Anders Hejlsberg將重返Delphi舞臺?
  5. 9月TIOBE編程語言排行榜發布 Delphi東山再起

 

責任編輯:彭凡 來源: 博客園
相關推薦

2012-01-04 10:07:56

Delphi

2011-10-31 14:29:14

2011-04-06 15:51:32

DelphiHOOK

2017-03-06 14:44:49

Androidhook技術

2011-06-08 14:42:33

C++多維數組

2010-02-05 15:32:33

Java內部類

2009-07-20 14:56:18

iBATIS.NET動態選擇DAO

2009-07-22 13:04:41

iBATIS動態查詢

2009-09-14 19:14:51

LINQ動態查詢

2016-09-14 21:28:25

JavaScript事件代理委托

2009-07-15 17:58:07

iBATIS 動態映射

2009-08-12 15:20:21

C#事件處理

2009-07-31 18:12:58

ASP.NET數據綁定

2009-09-15 09:19:22

linq動態條件

2021-03-16 10:00:40

JavaScript用戶登錄表單JavaScript基

2021-10-19 09:31:19

Javascript 登錄表單前端

2024-12-26 16:13:53

JavaScript開發表單

2019-10-21 11:04:14

云計算數據中心安全

2009-09-07 04:19:56

C#窗體事件

2009-06-18 13:51:07

Java虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品欧美 | 亚洲第一网站 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 欧美一级片免费看 | 国产精品美女久久久av超清 | 97avcc| 欧美一区免费 | 日本a级大片 | 1区2区视频 | 国产高清在线精品一区二区三区 | 天天av网 | 日韩a | 中文字幕在线一区二区三区 | 亚洲精品九九 | 国产精品成人一区二区 | av国产在线观看 | 亚洲成av人片在线观看 | 日本不卡高清视频 | 91久久精品一区二区二区 | 欧美成人影院在线 | 国产高清在线 | 国产精品美女久久久久久免费 | 亚洲高清视频在线观看 | 国产高清在线精品 | 韩日精品在线观看 | av在线天堂网 | 日韩在线视频精品 | 日韩视频在线播放 | 一级毛片成人免费看a | 亚洲高清视频在线观看 | 国产一区二区三区四区在线观看 | 免费高清av| 97精品超碰一区二区三区 | 午夜成人在线视频 | 国产毛片视频 | 日韩欧美三级电影 | 久久男女视频 | 亚洲一区二区三区四区在线观看 | 国产aa | 亚洲精品乱码久久久久久蜜桃 | 亚洲精品久久久久久久久久久久久 |