- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么是动态链接库?DLL 三个字母对于你来说一定很熟悉吧,它是 Dynamic Link
Library 的缩写形式,动态链接库 (DLL) 是作为共享函数库的可执行文件。动态
链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执
行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它
们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同
时访问内存中单个 DLL 副本的内容。
本文比较了Visual C++所支持的三种动态链接库,列出了各自不同的特点和应用
场合,详细地描述了三种动态链接库的建立和调用的方法。
关键字:动态链接库;导出函数;调用
引言
较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它
们彼此协作来完成整个软件系统的工作。在构造软件系统时,如果将所有模块的
源代码都静态编译到整个应用程序的EXE文件中,会产生一些问题:一个缺点是
增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的
内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EXE程序时,在每
次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于
阶段性的单元测试;而且,一些模块的功能可能较为通用,在构造其它软件系统
时仍会被使用。
Windows系统平台上提供了一种完全不同的较有效的编程和运行环境,你可
以将独立的程序模块创建为较小的动态链接库(Dynamic Linkable Library,DLL)
文件,并可对它们单独编译和测试。在运行时,只有当EXE程序确实要调用这些
DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE
文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序
使用。
动态链接库概述
动态链接库技术是Windows最重要的实现技术之一,Windows的许多新功能、
新特性都是通过DLL来实现的。其实,Windows本身就是由许多DLL组成的,它最
基本的三大组成模块Kernel、GDI和User都是DLL。
一般来说,DLL是一种磁盘文件,以.dll、.DRV、.FON、.SYS和许多以.EXE
为扩展名的系统文件都可以是DLL。它由全局数据、服务函数和资源组成,在运
行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。如果与其它DLL
之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL模块中包含
各种导出函数,用于向外界提供服务,Windows在加载DLL模块时将进程函数调用
与DLL文件的导出函数相匹配。DLL可以有自己的数据段,但没有自己的堆栈,DLL
模块需要的堆栈内存都是从运行进程的堆栈中分配出来的,使用与调用它的应用
程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;
DLL的编制与具体的编程语言及编译器无关。
动态链接库的分类
微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、
Regular Dll(常规DLL)、Extension Dll(扩展DLL)。
1、Non-MFC DLL(非MFC动态库)
这种动态链接库指的是不用MFC的类库结构,直接用C语言写的DLL,其导出
的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。如果建立的DLL
不需要使用MFC,那么应该建立Non-MFC DLL,因为使用MFC会增大用户库的大小,
从而浪费用户的磁盘和内存空间。
2、Regular DLL(常规DLL)
这种动态链接库和下述的Extension Dll一样,是用MFC类库编写的,它的一
个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL虽然从
CWinApp派生,但没有消息循环),被导出的函数是C函数、C++类或者C++成员函
数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应用
程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是
在Visual C++、Delphi、Visual Basic、Borland C等编译环境下利用DLL开发应
用程序。常规DLL又可细分成静态链接到MFC和动态链接
文档评论(0)