毕业论文 - VC++环境下的动态链接库的开发与应用

目录

目录 .......................................................................................................................................................................1 中文摘要 ...............................................................................................................................................................2 Abstract .................................................................................................................................................................2 一、概论 ...............................................................................................................................................................3

1.1. 研究背景 ...............................................................................................................................................3 1.2. 动态链接库的定义 ...............................................................................................................................3 1.3. 动态链接库与静态链接库 ...................................................................................................................3

1.3.1. 静态链接库 ................................................................................................................................3 1.3.2. 动态链接库与静态链接库的区别 ............................................................................................4 1.4. 动态链接库的优点 ...............................................................................................................................4 1.5. 在以下这些情况下,必须使用动态链接库: ...................................................................................4 1.6. Visual C++支持的动态链接库的类型 ...................................................................................................5 二、非MFC动态链接库......................................................................................................................................5

2.1. Non-MFC DLL动态链接库的创建 .........................................................................................................5

2.1.1. 创建一个Non-MFC Dll工程“MyDll” ....................................................................................6 2.1.2. 代码分析 ....................................................................................................................................8 2.2. 声明导出函数 .......................................................................................................................................9 2.3. DLL的调用方式 .....................................................................................................................................9 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 六、参考文献 .................................................................................................................................................... 38 七、致谢 ............................................................................................................................................................ 38

1

VC++环境下动态链接库的开发及应用

中文摘要

动态链接库英文为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

2

VC++环境下动态链接库的开发及应用

一、概论

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文件,库中的代码最后需要连接到你的可执行文件中去。

3

VC++环境下动态链接库的开发及应用

静态链接库不同于动态链接库(*.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)在对话框编辑器中使用自己定义的控件,也必须使用动态链接库

4

联系客服:779662525#qq.com(#替换为@)