我正在使用由同一供应商生产的两个商业库,名为VendorLibA和VendorLibB.这些库分布了许多依赖于编译器版本的DLL(例如VC7,VC8).两个库都依赖于另一个库,由该供应商生成,名为VendorLibUtils并包含在一个DLL中.
问题:VendorLibA使用与VendorLibB不同的VendorLibUtils版本.这两个版本不是二进制兼容的,即使它们是使用错误的版本也是一个坏主意.
有什么方法可以在同一个过程中使用这两个库吗?
注意: LoadLibrary无法解决此问题,因为我的进程不是导入VendorLibUtils的进程.
编辑:忘了提到显而易见的,我没有任何商业图书馆的源代码,可能我永远不会(感叹).
编辑:替代btw,是这样做:如何在Windows中组合GUI应用程序
我认为您最有希望的选择是大声抱怨分发互不兼容产品的供应商.这反而违背了DLL的想法.
您不能只将DLL放在不同的目录中.一旦加载了具有给定名称的DLL,所有其他尝试加载具有相同模块名称的另一个DLL将仅使用已加载的DLL,即使路径不同.
由此,我们可以得出结论,要加载两个VendorLibUtils副本,一个副本需要具有不同的名称.你不能只重命名DLL文件; 程序中的代码不知道要查找不同的文件.因此,也许有一种方法可以编辑VendorLibB的导入表,使其认为所需的功能在VendorLibUtilsB.dll而不仅仅是VendorLibUtils.dll中.我担心我不知道会有什么用处,但我毫不怀疑它有可能做到.