版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 对于Windows应用程序向言,创建一个没有使用DLL的应用程序几乎是不可能的,前面使用的所有API函数都是从系统动态链接库导出的。实际上,Windows提供给编程人员的几乎所有功能都驻留在动态链接库中。Windows钩子广泛应用于各种侦测程序中,如输入监视、API截获等。一般钩子必须写在动态链接库中,以便提供了其他程序使用。l 了解动态链接库的运行机制l 在DLL中导出函数l 函数的调用约定l DLL的调用方式l 在DLL中导出变量l 在DLL中导出类l MFC规则DLLl MFC扩展DLLl Windows钩子的应用 DLL实际上指的就是动态链接库。大部分动态链接库是以扩展名为dll的文
2、件形式存在的,但并不是只有dll扩展名的文件才是动态链接库,系统中的某些exe文件、字体文件(*.fon)、驱动程序(*.drv)和各种控件(*.ocx)等都是动态链接库。实际上,系统中大部分包含公用代码的模块都有可能是动态链接库。 需要注意,动态链接库不能自己执行,它必须被映射到其他应用程序的地址空间中才能执行。当动态链接库可被是映射到应用程序内存后,它可以使用应用程序的资源,它所拥有的资源也可以被应用程序使用,它的任何操作都是代表应用程序进行的,当动态链接库进行打开文件、分配内存和创建窗口等操作后,这些文件、内存和窗口都是应用程序所拥有的。 静态链接库的使用方法:首先将静态连接库的头文件.
3、h和库.lib放到自己项目目录下;然后在stdafx.h头文件中包含静态库及其头文件: #include xxx.h #pragma comment(lib,xxx.lib) 这样编译器在编译时就会将库文件中的函数导入到程序中。 常规DLL有优点有以下几方面:l 客户程序不必是一个MFC应用程序。它只需要能调用C函数即可,即可以是MFC应用程序,也可以是Delphi或Visual Basic应用程序。l 在常规DLL的内部可以使用C+类,然后只导出C函数的包装器。这样,对内部的C+类的任何修改都不会影响到调用它的应用程序或DLL。 在DLL中导出函数的声明有两种方式:一种是在函数声明中添加_d
4、eclspec(dllexport)修饰符;另外一种方式是采用模块定义.def文件声明,模块定义文件.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。 在前面的示例使用LoadLibrary()、GetProcAddress()和FreeLibrary()三个API函数调用DLL,它们分别实现了DLL加载、DLL函数地址获取、DLL释放,这种调用方式被称为DLL的动态调用。动态调用的特点是编程人员完全用API函数加载和卸载DLL,这样可以决定DLL文件何时加载或不加载。 与动态调用方式相对应的就是静态调用方式。静态调用方式的特点是由编译器完成对DLL的加载和卸载。静态调用方
5、式相对简单实用,但不如动态调用方式灵活。 调用约定用来处理决定函数参数传送时入栈和出栈的顺序,以及编译器用来识别函数名称的名称修饰约定等问题。 在C+中,为了允许操作符重载和函数重载,C+编译器往往按照某种规则改写函数名,这项技术通常被称为名称改编,而C语言编译器在编译时则不会进行名字改编。所以,当C+调用C语言生成的函数或函数库时链接器会无法正确的链接相应的函数,同样,C调用C+生成的函数库时链接器也无法解析相应的函数。为了解决这个问题,C+提供了修饰符extern C来解决这个问题。为导出函数添加该修饰符后,编译器在编译时将按照C的方式去处理,不进行名称改编。 另外,为了使其它语言编写的模
6、块,如Visual Basic应用程序或Pascal应用程序等都可以调用C/C+编写的DLL的函数,必须使用正确的调用约定来导出函数,并且不让编译器对要导出的函数进行任何名称改编。Visual C+中。 C/C+默认的调用方式为_cdecl,而标准调用约定是_stdcall,WINAPI都采用这种方式。在调用约定改变时,名称改编也不一致。当使用C编译方式(函数声明为extern C)时,如果用_cdecl调用约定编译,则不会进行名字改编,但是如果用_stdcall调用约定时,则会发生名称改编,这样,其他用_stdcall调用约定的编译器就无法调用该函数。 组合框将单行编辑框和列表框组合为一体。
7、组合框有三种类型:简单型、下拉型和下拉列表型。在这三种类型中,简单型组合框最小使用,其列表部分总会被显示。用户从列表中选中一个项目时,该项目会自动复制到编辑框部分。用户也可以直接在编辑框部分输入文本。如果用户输入的文本与列表中某项目匹配,该项目将被自动加亮显示并滚动到可见的地方。 下拉型组合框与简单型组合框的不同之处在于它的列表只有被要求时才显示。下拉列表型组合框的工作方式与下拉型组合框相同,但它不允许在编辑部分输入文本,只允许用户在列表中选择项目。 MFC规则DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序。MFC规则DLL包含两个方面:在该DLL的内
8、部可以使用MFC类库;另外,为了使其他非MFC程序能调用DLL,所以它的导出接口不能使用MFC类。根据规则DLL使用MFC DLL的不同,规则DLL可以分为两类:共享MFC DLL的规则DLL和静态链接MFC DLL的规则DLL。 对于静态链接MFC DLL的规则DLL而言,在编译时会将MFC库中的代码直接生成在DLL文件中。当应用程序调用这种DLL时,所使用的MFC资源是互相独立。 对于共享MFC DLL的规则DLL而言,在编译时并没有将MFC DLL中的代码添加到DLL中,在应用程序调用这种DLL时,它们将共享MFC DLL。 在Windows系统中,它使用实例句柄HINSTANCE标识应
9、用程序进程及其调用的DLL模块。在使用了MFC共享库时,默认情况下,MFC将使用应用程序进程的HINSTANCE句柄加载资源。当DLL和应用程序都有自己的资源,并且这些资源可能有相同的ID标识时,这时应用程序就需要通过资源模块的切换来找到正确的资源。如果应用程序需要来自于DLL的资源,就应将资源模块句柄指定为DLL的模块句柄;如果需要应用程序中包含的资源,就应将资源模块句柄指定为应用程序的模块句柄。 常规DLL和MFC规则DLL主要用于非MFC客户程序,而MFC扩展DLL用于导出增强MFC的函数和类,它的客户应用程序必须是MFC应用程序。 Windows系统是建立在事件驱动机制之上的,系统各部
10、分之间的通信也都是通过消息的相互传递而实现的。在通常情况下,应用程序只能处理来自它内部的消息,或者是从其他进程发过来的消息,如果需要对进程外传递的消息进行拦截处理,就必须采取一种被称为HOOK(钩子)的技术。 钩子的本质是一段用于处理系统消息的程序,通过“钩挂”可以给Windows设置一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,每当感兴趣的事件发生时,Windows都将调用该函数。 根据在使用钩子时可以根据其监视范围的不同,HOOK钩子分为两种类型:局部钩子和全局钩子。局部钩子仅钩挂自己进程的事件,而全局钩子将捕捉系统中所有进程将发生的事件消息。需要注意,安装钩子函数将会影响系统的性能,特别是监测“系统范围事件”的全局钩子。因为系统在处理所有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖南省中南林业科技大学涉外学院人才招聘备考题库及答案详解【易错题】
- 2026河北保定市消防救援支队次政府专职消防员招录154人备考题库含答案详解【培优a卷】
- 2026湖北武汉刘三屋中医骨伤医院招聘49人备考题库(b卷)附答案详解
- 2026西南石油大学南充校区安全与后勤保障部招聘2名临时聘用员工备考题库(四川)含答案详解【模拟题】
- 太原师范学院《中学生物教育研究方法》2025-2026学年期末试卷
- 上海师范大学天华学院《劳动与社会保障法》2025-2026学年期末试卷
- 石家庄科技职业学院《中外艺术鉴赏》2025-2026学年期末试卷
- 上海杉达学院《中国现代文学三十年》2025-2026学年期末试卷
- 上海外国语大学贤达经济人文学院《资本资产定价》2025-2026学年期末试卷
- 沈阳建筑大学《细胞生物学》2025-2026学年期末试卷
- 自来水厂安全生产题库及答案解析
- 高空作业车安全操作规程
- 2024云南省委党校研究生招生考试真题(附答案)
- 诺如病毒考试题及答案
- DB45∕T 2479-2022 一般固体废物填埋场水文地质工程地质勘察规范
- 岗位安全责任清单意义
- 2025年焊工(技师)考试练习题库(附答案)
- 学术自由与责任共担:导师制度与研究生培养制的深度探讨
- 法拍司辅内部管理制度
- 道路损坏修缮协议书模板
- 2025年上海市各区高三二模语文试题汇编《现代文一》含答案
评论
0/150
提交评论