当前位置:  开发笔记 > 编程语言 > 正文

我可以在同一个进程中使用同一DLL的两个不兼容版本吗?

如何解决《我可以在同一个进程中使用同一DLL的两个不兼容版本吗?》经验,为你挑选了1个好方法。

我正在使用由同一供应商生产的两个商业库,名为VendorLibA和VendorLibB.这些库分布了许多依赖于编译器版本的DLL(例如VC7,VC8).两个库都依赖于另一个库,由该供应商生成,名为VendorLibUtils并包含在一个DLL中.

问题:VendorLibA使用与VendorLibB不同的VendorLibUtils版本.这两个版本不是二进制兼容的,即使它们是使用错误的版本也是一个坏主意.

有什么方法可以在同一个过程中使用这两个库吗?

注意: LoadLibrary无法解决此问题,因为我的进程不是导入VendorLibUtils的进程.

编辑:忘了提到显而易见的,我没有任何商业图书馆的源代码,可能我永远不会(感叹).

编辑:替代btw,是这样做:如何在Windows中组合GUI应用程序



1> Rob Kennedy..:

我认为您最有希望的选择是大声抱怨分发互不兼容产品的供应商.这反而违背了DLL的想法.

您不能只将DLL放在不同的目录中.一旦加载了具有给定名称的DLL,所有其他尝试加载具有相同模块名称的另一个DLL将仅使用已加载的DLL,即使路径不同.

由此,我们可以得出结论,要加载两个VendorLibUtils副本,一个副本需要具有不同的名称.你不能只重命名DLL文件; 程序中的代码不知道要查找不同的文件.因此,也许有一种方法可以编辑VendorLibB的导入表,使其认为所需的功能在VendorLibUtilsB.dll而不仅仅是VendorLibUtils.dll中.我担心我不知道会有什么用处,但我毫不怀疑它有可能做到.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有