目录
目录 1
中文摘要 2
Abstract 2
一、概论 3
1.1. 研究背景 3
1.2. 动态链接库的定义 3
1.3. 动态链接库与静态链接库 4
1.3.1. 静态链接库 4
1.3.2. 动态链接库与静态链接库的区别 4
1.4. 动态链接库的优点 4
1.5. 在以下这些情况下,必须使用动态链接库: 5
1.6. Visual C++支持的动态链接库的类型 5
二、非MFC动态链接库 6
2.1. Non-MFC DLL动态链接库的创建 6
2.1.1. 创建一个Non-MFC Dll工程"MyDll" 6
2.1.2. 代码分析 8
2.2. 声明导出函数 9
2.3. DLL的调用方式 10
2.4. DllMain函数 11
三、MFC规则动态链接库的创建 13
3.1. 概述 13
3.2. MFC规则DLL分为两类: 13
3.3. MFC规则DLL的创建 14
3.4. MFC规则DLL的调用 18
3.5. 隐式调用 22
四、MFC扩展动态链接库的创建 24
4.1. 概述 24
4.3. MFC扩展DLL的加载 30
五、动态链接库的典型应用 31
5.4. DLL木马 36
六、参考文献 37
七、致谢 38
中文摘要
动态链接库英文为Dynamic Link Library,英文缩写为DLL,是程序运行时由该程序动态链接调用的函数库,是一些函数、数据和类集合成的可执行模块,程序员可以将动态链接库动态地集成到自己的程序中以使用库中的函数、数据和类。开发和应用动态链接库,有助于数据和资源的共享,简化了软件项目的管理。本文主要介绍动态链接库创建、调用方法,及其典型应用。
关键词:动态链接库(DLL),非MFC DLL,MFC规则DLL,MFC扩展DLL
Abstract
Dynamic Link Library (DLL) encapsulates the shared resource and code.In exploring the application based on Windows,the use of DLL technology can greatly save the memory.Using DLL developing project can simplify the project management and speed up the exploration.This paper,introducing the implicit and explicit linking of DLL with instances,provides technical support to technicians in exploring and using DLL.
Key words:Dynamic Link Library (DLL) , Non-MFC DLL ,MFC Regular DLL ,
MFC Extension DLL
一、概论
1.1. 研究背景
自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。
在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。
既然DLL那么重要,所以搞清楚什么是DLL、如何在Windows操作系统中开发使用DLL是程序开发人员不得不解决的一个问题。本文针对这些问题,通过一个简单的例子,全面地解析了在Visual C++编译环境下编程实现DLL的过程。
1.2. 动态链接库的定义
动态链接库英文为Dynamic Link Library,英文缩写为DLL,是程序运行时由该程序动态链接调用的函数库,是一些函数、数据和类集合成的可执行模块,程序员可以将动态链接库动态地集成到自己的程序中以使用库中的函数、数据和类。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。多个应用程序可同时访问内存中单个DLL 副本的内容。
1.3. 动态链接库与静态链接库
1.3.1. 静态链接库
静态链接库就是你使用的.lib文件,库中的代码最后需要连接到你的可执行文件中去。静态链接库不同于动态链接库(*.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。用户在交付最终静态链接库时,只需要提供.lib文件和相应的头文件,不需要再提供库的源代码。在需要使用静态库的工程中,包含相应的头文件,并把.lib文件加入工程中就可以了。
1.3.2. 动态链接库与静态链接库的区别
动态链接发生在程序运行时,动态链接的函数代码不出现在程序的EXE文件中,它仅仅包含了应用程序运行过程中所调用的DLL函数的一些最基本信息(例如DLL文件位置、函数名等);而静态链接发生在编译时,静态链接的函数代码实际被插入到程序的EXE文件中。
1.4. 动态链接库的优点
动态链接库随处可见,无论大型系统还是小规模软件,都应用了动态链接库,有效地实现了资源共享。在软件开发中,应用动态链接库具有以下优点:
(1)扩展了应用程序的特性;
(2)可以用许多种编程语言来编写;
(3)简化了软件项目的管理;
(4)有助于节省内存;
(5)有助于资源共享;
(6)有助于应用程序的本地化;
(7)有助于解决平台差异。
1.5. 在以下这些情况下,必须使用动态链接库:
(1)多个应用程序共享代码和数据
(2)在各子程序过滤系统消息时必须使用动态链接库
(3)设备驱动程序必须是动态链接库
(4)在对话框编辑器中使用自己定义的控件,也必须使用动态链接库
(5)为了实现应用程序的国际化,往往需要使用动态链接库
1.6. Visual C++支持的动态链接库的类型
Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。
(1) 非MFC动态库
指不使用MFC类库创建的DLL。Win32 DLL中的导出函数通常使用标准的C接口,这些函数可以被MFC或非MFC应用程序调用。
(2) MFC规则DLL
MFC规则DLL可以使用MFC来创建,可以导出C风格的函数,但不能导出C++类、成员函数或重载函数。它们可以被MFC或非MFC应用程序调用。但这种类型的DLL不能向应用程序传递MFC对象指针,必须使用MFC扩展DLL。MFC常规DLL按照与MFC的链接方式又分动态链接和静态链接两种。
(3) MFC扩展DLL
表面上更像应用程序而不像一组函数的集合,因为它可以创建MFC派生类。只能以动态方式与MFC链接,而且只能是使用MFC的动态链接版本的应用程序才可以使用这种DLL。在MFC扩展DLL中,可以由现有的MFC类导出自己的类,然后给应用程序一个扩展的MFC版本。支持C++接口,也就是说,该DLL可以导出整个类,客户可以构造这些类的对象或从这些类进行派生。还可以用于在应用程序和DLL之间传递MFC导出对象。对象的成员函数位于创建对象的模块中,应用程序和它加载的扩展DLL之间可以自如地传递MFC或M
上一篇:
毕业论文(宾馆管理系统)(2003doc)
下一篇:
采用VC的伺服电机控制毕业论文(2003doc)