我爱Aspx >> VB.Net >> VB.net中HOOK的应用(CNET中文网)所以,正是由于Addressof创建的不再只是简单的函数指针了,而是子程委托!打住先,什么是委托?(^?^)
解释一下:事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。在事件通讯中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET 框架定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。看,这里提到了.net框架,所以C#等vs.net中的语言都可以有这个类型喽。
委托就是可用于调用其他对象方法的对象。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。因为它们与其他编程语言中所使用的函数指针相似。但不同于函数指针,Visual Basic.NET 委托是基于 System.Delegate 类的引用类型,它可以引用共享方法—无需特定即可调用的方法—和实例方法。(具体内容请自已去查阅一下MSDN或等我的后续文章再说明)
回过头来总结一下,也就是说,Addressof创建的是DelegateType(委托类型)。而不是简单的子程指针了,所以它的表示法就不是地址类型的long了,而是与调用的子程相一致的委托类型表示形式。因此,我定义了一个与MyKBHFunc声明同形的委托函数HOOKPROC来表示lpfn的类型。
(呼,一头汗,还不知道说清楚了没有。希望是说清楚了……)
继续,我又接着声明了一个API:
Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Integer
函数说明:本函数是用于获取当前线程一个唯一的线程标识符。返回值:当前的线程标识符。这个有什么用,一会再说,反正是个简单的问题,不如卖个关子,哈哈……(不要砸我)
【我对这篇文章有话说?】
VB.NET的Override事件处理程序[05-20]
vb.Net编程简介之五(轉)[05-20]
vb.Net编程简介之四[05-20]
VB.Net语言方面的改进(轉)[05-20]
Vb.Net问题集 (转贴于此)[05-20]
VB.Net常用语法(转)[05-20]
Visual Basic .NET中的语言创新[05-20]
Visual Basic.NET 新编程模型和语..[05-20]
VS.NET为企业作好准备了吗?[05-20]
Visual Basic 6.0 控件和 .NET 控..[05-20]
VB.NET的Override事件处理程序[05-20]
vb.Net编程简介之五(轉)[05-20]
vb.Net编程简介之四[05-20]
VB.Net语言方面的改进(轉)[05-20]
Vb.Net问题集 (转贴于此)[05-20]
VB.Net常用语法(转)[05-20]
Visual Basic .NET中的语言创新[05-20]
Visual Basic.NET 新编程模型和语..[05-20]
VS.NET为企业作好准备了吗?[05-20]
Visual Basic 6.0 控件和 .NET 控..[05-20]