Windows 98不支持D L L转移。
当Wi n d o w
s刚刚开发成功时,R A M和磁盘空间是非常宝贵的。因此Wi n d o w
s在设计时总是尽可能多地安排资源的共享,以节省宝贵的存储器资源。为了达到这个目的, M i c r o s o f
t建议,多个应用程序共享的任何模块,如C / C + +运行期库和M i c r o s o f t基础类(M F C)D L
L等,应该放入Wi n d o w s的系统目录中。这样,系统就能够方便地找到共享文件。
随着时间的推移,这变成一个非
常严重的问题,因为安装程序会用旧文件或尚未完全实现向后兼容的新文件来改写该目录中的文件。这将使用户的其他应用程序无法正确地运行。今天,硬盘的容量
已经非常大,并且很便宜, R A M的容量也相当富裕,价格也便宜了一些。因此,M i c r o s o f
t改变了原先的开发策略,非常支持你将应用程序的所有文件放入它们自己的目录中,而不要去碰Wi n d o w
s的系统目录中的任何东西。这样,你的应用程序就不会损坏别的应用程序,别的应用程序也不会损坏你的应用程序。
为了给你提供相应的帮助,M i c r o s o f t给Windows 2000增加了一个D L L转移特性。这个特性能够强制操作系统的加载程序首先从你的应用程序目录中加载文件模块。只有当加载程序无法在应用程序目录中找到该文件时,它才搜索其他目录。
为了强制加载程序总是首先查找应用程序的目录,要做的工作就是在应用程序的目录中放入一个文件。该文件的内容可以忽略,但是该文件必须称为A p p N a m e . l o c a l。
例如,如果有一个可执行文件的名字是S u p e r A p p . e x e ,那么转移文件必须称为S u p e r A p p . e x e . l o c a l。
在系统内部, L o a d
L i b r a r y ( E x
)已经被修改,以便查看是否存在该文件。如果应用程序的目录中存在该文件,该目录中的模块就已经被加载。如果应用程序的目录中不存在这个模块,L o a
d L i b r a r y ( E x )将正常运行。
对于已经注册的C O M对象来说,这个特性是非常有用的。它使应用程序能够将它的C O M对象D L L放入自己的目录,这样,注册了相同C O M对象的其他应用程序就无法干扰你的操作。