版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第20章
动态链接库与钩子
对于Windows应用程序向言,创建一个没有使用DLL的应用程序几乎是不可能的,前面使用的所有API函数都是从系统动态链接库导出的。实际上,Windows提供给编程人员的几乎所有功能都驻留在动态链接库中。Windows钩子广泛应用于各种侦测程序中,如输入监视、API截获等。一般钩子必须写在动态链接库中,以便提供了其他程序使用。了解动态链接库的运行机制在DLL中导出函数函数的调用约定DLL的调用方式在DLL中导出变量在DLL中导出类MFC规则DLLMFC扩展DLLWindows钩子的应用
20.1了解DLL
DLL实际上指的就是动态链接库。大部分动态链接库是以扩展名为dll的文件形式存在的,但并不是只有dll扩展名的文件才是动态链接库,系统中的某些exe文件、字体文件(*.fon)、驱动程序(*.drv)和各种控件(*.ocx)等都是动态链接库。实际上,系统中大部分包含公用代码的模块都有可能是动态链接库。需要注意,动态链接库不能自己执行,它必须被映射到其他应用程序的地址空间中才能执行。当动态链接库可被是映射到应用程序内存后,它可以使用应用程序的资源,它所拥有的资源也可以被应用程序使用,它的任何操作都是代表应用程序进行的,当动态链接库进行打开文件、分配内存和创建窗口等操作后,这些文件、内存和窗口都是应用程序所拥有的。
20.2静态链接库
静态链接库的使用方法:首先将静态连接库的头文件.h和库.lib放到自己项目目录下;然后在stdafx.h头文件中包含静态库及其头文件:#include"xxx.h"#pragmacomment(lib,"xxx.lib")这样编译器在编译时就会将库文件中的函数导入到程序中。
20.3常规DLL
常规DLL有优点有以下几方面:客户程序不必是一个MFC应用程序。它只需要能调用C函数即可,即可以是MFC应用程序,也可以是Delphi或VisualBasic应用程序。在常规DLL的内部可以使用C++类,然后只导出C函数的包装器。这样,对内部的C++类的任何修改都不会影响到调用它的应用程序或DLL。
20.3.1声明导出函数
在DLL中导出函数的声明有两种方式:一种是在函数声明中添加__declspec(dllexport)修饰符;另外一种方式是采用模块定义.def文件声明,模块定义文件.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。20.3.2DLL的调用方式
在前面的示例使用LoadLibrary()、GetProcAddress()和FreeLibrary()三个API函数调用DLL,它们分别实现了DLL加载、DLL函数地址获取、DLL释放,这种调用方式被称为DLL的动态调用。动态调用的特点是编程人员完全用API函数加载和卸载DLL,这样可以决定DLL文件何时加载或不加载。与动态调用方式相对应的就是静态调用方式。静态调用方式的特点是由编译器完成对DLL的加载和卸载。静态调用方式相对简单实用,但不如动态调用方式灵活。
20.3.3调用约定与名称改编
调用约定用来处理决定函数参数传送时入栈和出栈的顺序,以及编译器用来识别函数名称的名称修饰约定等问题。在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写函数名,这项技术通常被称为名称改编,而C语言编译器在编译时则不会进行名字改编。所以,当C++调用C语言生成的函数或函数库时链接器会无法正确的链接相应的函数,同样,C调用C++生成的函数库时链接器也无法解析相应的函数。为了解决这个问题,C++提供了修饰符extern"C"来解决这个问题。为导出函数添加该修饰符后,编译器在编译时将按照C的方式去处理,不进行名称改编。另外,为了使其它语言编写的模块,如VisualBasic应用程序或Pascal应用程序等都可以调用C/C++编写的DLL的函数,必须使用正确的调用约定来导出函数,并且不让编译器对要导出的函数进行任何名称改编。VisualC++中。C/C++默认的调用方式为__cdecl,而标准调用约定是_stdcall,WINAPI都采用这种方式。在调用约定改变时,名称改编也不一致。当使用C编译方式(函数声明为extern"C")时,如果用_cdecl调用约定编译,则不会进行名字改编,但是如果用_stdcall调用约定时,则会发生名称改编,这样,其他用_stdcall调用约定的编译器就无法调用该函数。
20.3.4导出类组合框将单行编辑框和列表框组合为一体。组合框有三种类型:简单型、下拉型和下拉列表型。在这三种类型中,简单型组合框最小使用,其列表部分总会被显示。用户从列表中选中一个项目时,该项目会自动复制到编辑框部分。用户也可以直接在编辑框部分输入文本。如果用户输入的文本与列表中某项目匹配,该项目将被自动加亮显示并滚动到可见的地方。下拉型组合框与简单型组合框的不同之处在于它的列表只有被要求时才显示。下拉列表型组合框的工作方式与下拉型组合框相同,但它不允许在编辑部分输入文本,只允许用户在列表中选择项目。
20.4MFC规则DLL
MFC规则DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序。MFC规则DLL包含两个方面:在该DLL的内部可以使用MFC类库;另外,为了使其他非MFC程序能调用DLL,所以它的导出接口不能使用MFC类。根据规则DLL使用MFCDLL的不同,规则DLL可以分为两类:共享MFCDLL的规则DLL和静态链接MFCDLL的规则DLL。
20.4.1静态链接MFCDLL的规则DLL
对于静态链接MFCDLL的规则DLL而言,在编译时会将MFC库中的代码直接生成在DLL文件中。当应用程序调用这种DLL时,所使用的MFC资源是互相独立。
20.4.2共享MFCDLL的规则DLL
对于共享MFCDLL的规则DLL而言,在编译时并没有将MFCDLL中的代码添加到DLL中,在应用程序调用这种DLL时,它们将共享MFCDLL。在Windows系统中,它使用实例句柄HINSTANCE标识应用程序进程及其调用的DLL模块。在使用了MFC共享库时,默认情况下,MFC将使用应用程序进程的HINSTANCE句柄加载资源。当DLL和应用程序都有自己的资源,并且这些资源可能有相同的ID标识时,这时应用程序就需要通过资源模块的切换来找到正确的资源。如果应用程序需要来自于DLL的资源,就应将资源模块句柄指定为DLL的模块句柄;如果需要应用程序中包含的资源,就应将资源模块句柄指定为应用程序的模块句柄。
20.5MFC扩展DLL
常规DLL和MFC规则DLL主要用于非MFC客户程序,而MFC扩展DLL用于导出增强MFC的函数和类,它的客户应用程序必须是MFC应用程序。
20.6Windows钩子
Windows系统是建立在事件驱动机制之上的,系统各部分之间的通信也都是通过消息的相互传递而实现的。在通常情况下,应用程序只能处理来自它内部的消息,或者是从其他进程发过来的消息,如果需要对进程外传递的消息进行拦截处理,就必须采取一种被称为HOOK(钩子)的技术。
20.6.1认识HOOK钩子
钩子的本质是一段用于处理系统消息的程序,通过“钩挂”可以给Windows设置一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,每当感兴趣的事件发生时,Windows都将调用该函数。根据在使用钩子时可以根据其监视范围的不同,HOOK钩子分为两种类型:局部钩子和全局钩子。局部钩子仅钩挂自己进程的事件,而全局钩子将捕捉系统中所有进程将发生的事件消息。需要注意,安装钩子函数将会影响系统的性能,特别是监测“系统范围事件”的全局钩
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年绿色生态建筑农民工劳动合同示范3篇
- 二零二五年度防盗门行业市场分析报告合同2篇
- 二零二五版加油站智能监控与数据分析合同3篇
- 二零二五白云区观白活力中心房地产合作开发投资框架合同2篇
- 二零二五年度智能家电产品研发与销售合同3篇
- 二零二五版养殖企业与个体养牛户合作合同3篇
- 二零二五版数据中心机房租赁及数据备份服务合同2篇
- 基于2025年度5G网络技术研发合作合同2篇
- 二零二五版拌和站产品质量追溯与售后服务合同2篇
- 二零二五版建筑工程土方中介合同纠纷调解机制3篇
- 物业费收取协议书模板
- 电工(中级工)理论知识练习题(附参考答案)
- 工业设计概论试题
- 2024-2030年中国商务服务行业市场现状调查及投资前景研判报告
- 起重机的维护保养要求与月度、年度检查记录表
- 消防设施维护保养记录表
- 城区生活垃圾填埋场封场项目 投标方案(技术方案)
- 垃圾分类巡检督导方案
- 大一护理生涯发展展示
- 五年级上册数学应用题100题及答案
- 新生儿急救与复苏培训
评论
0/150
提交评论