1. 它们扩展了应用程序的特性。由于D L L能够动态地装入进程的地址空间,因此应用程序能够在运行时确定需要执行什么操作,然后装入相应的代码,以便根据需要执行这些操作。例如,当一家公司开发了一种产品,想要让其他公司改进或增强该产品的功能时,那么就可以使用D L L。
2. 它们可以用许多种编程语言来编写。可以选择手头拥有的最好的语言来编写D L L。也许你的应用程序的用户界面使用Microsoft Visual Basic编写得最好,但是用C + +来处理它的商用逻辑更好。系统允许Visual Basic程序加载C++ DLL、Cobol DLL和Fortran DLL等。
3.它们简化了软件项目的管理。如果在软件开发过程中不同的工作小组在不同的模块上工作,那么这个项目管理起来比较容易。但是,应用程序在销售时附带的文件应该尽量少一些。我知道有一家公司销售的产品附带了1 0 0个D L L——每个程序员最多有5个D L L。这样,应用程序的初始化时间将会长得吓人,因为系统必须打开1 0 0个磁盘文件之后,程序才能执行它的操作。
4.它们有助于节省内存。如果两个或多个应用程序使用同一个D L L,那么该D L L的页面只要放入R A M一次,所有的应用程序都可以共享它的各个页面。C / C + +运行期库就是个极好的例子。许多应用程序都使用这个库。如果所有的应用程序都链接到这个静态库,那么s p r i n t f、s t r c p y和m a l l o c等函数的代码就要多次存在于内存中。但是,如果所有这些应用程序链接到DLL C/C++运行期库,那么这些函数的代码就只需要放入内存一次,这意味着内存的使用将更加有效。
5.它们有助于资源的共享。D L L可以包含对话框模板、字符串、图标和位图等资源。多个应用程序能够使用D L L来共享这些资源。
6.它们有助于应用程序的本地化。应用程序常常使用D L L对自己进行本地化。例如,只包含代码而不包含用户界面组件的应用程序可以加载包含本地化用户界面组件的D L L。
7.它们有助于解决平台差异。不同版本的Wi d n o w s配有不同的函数。开发人员常常想要调用新的函数(如果它们存在于主机的Wi n d o w s版本上的话)。但是,如果你的源代码包含了对一个新函数的调用,而你的应用程序将要在不能提供该函数的Wi n d o w s版本上运行,那么操作系统的加载程序将拒绝运行你的进程。即使你实际上从不调用该函数,情况也是这样。如果将这些新函数保存在D L L中,那么应用程序就能够将它们加载到Wi n d o w s的老版本上。当然,你仍然可以成功地调用该函数。
8.它们可以用于一些特殊的目的。Wi n d o w s使得某些特性只能为D L L所用。例如,只有当D L L中包含某个挂钩通知函数的时候,才能安装某些挂钩(使用S e t Wi n d o w s H o o k E x和S e t Wi n E v e n t H o o k来进行安装)。可以通过创建必须在D L L中生存的C O M对象来扩展Windows Explorer的外壳程序。对于可以由We b浏览器加载的、用于创建内容丰富的We b页的A c t i v e X控件来说,情况也是一样.