background image

C++ Dll 编写入门

  自从微软推出 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 接口,能被非