因此有一个可执行文件,foo.exe
。同一目录中它周围的其他可执行文件依赖于bar.dll
版本 2。但foo.exe
依赖于bar.dll
版本1。
假设我将bar.dll
版本 1 重命名为bar1.dll
。版本 2 仍称为bar.dll
。
那么我是否可以以某种方式修改foo.exe
要加载的二进制文件bar1.dll
而不是bar.dll
?
答案1
如果两个 DLL 版本在入口点名称和参数上兼容,则您不需要修改任何内容。您只需要使用 Windows 的 DLL 加载顺序规则,该规则优先从执行程序所在的文件夹加载 DLL。
然后,您需要将每个应用程序隔离在其自己的文件夹中,在两个文件夹中复制公共文件(如果需要),或者在一个文件夹中仅添加指向另一个文件夹中文件的符号链接(以避免重复)。
每个应用程序的文件夹都应包含其自己的 DLL 版本,并使用正确的名称。
这样,就不会发生冲突,并且您不需要对应用程序的可执行文件进行十六进制编辑。
如果入口点的名称和/或参数不同,则需要编写自己的接口 DLL 并调用它
bar.dll
。 旧的 DLL 可以重命名并从新编写的 DLL 中调用。
为了帮助分析两个版本的入口点并比较入口点和参数,请参阅帖子 如何从 DLL 生成导入库(LIB 文件)?