2024年3月28日发(作者:)
一、 前言
二、 自从微软推出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是程序开发人员不得不解决的一个问题。本文针对这些问题,通过一个简单的
例子,即在一个DLL中实现比较最大、最小整数这两个简单函数,全面地解析了在Visual
C++编译环境下编程实现DLL的过程,文章中所用到的程序代码在Windows98系统、
Visual C++6.0编译环境下通过。
五、 二、DLL的概念
六、 DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,
函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可
以是应用程序或者是其它的DLL。DLL库不同于静态库,在静态库情况下,函数和数据被
编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在处理程序代码时将
从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行
文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出
来,所以静态库本身并不需要与可执行文件一起发行。
七、 在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,
引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序
使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,
因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的
函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链
接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序
一起发行,否则应用程序将会产生错误。
八、 微软的Visual C++支持三种DLL,它们分别是Non-MFC Dll(非MFC动态库)、
Regular Dll(常规DLL)、Extension Dll(扩展DLL)。Non-MFC DLL指的是不用MFC
的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或
MFC编写的应用程序所调用。Regular DLL:和下述的Extension Dlls一样,是用MFC类
库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL
虽然从CWinApp派生,但没有消息循环),被导出的函数是C函数、C++类或者C++成
员函数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应
用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是在
Visual C++、Dephi、Visual Basic、Borland C等编译环境下利用DLL开发应用程序。
九、 常规DLL又可细分成静态链接到MFC和动态链接到MFC上的,这两种常规


发布评论