[英]Dll dependency version conflict
我在Visual Studio 2008 Express中使用C ++。
我们正在向客户端提供仅二进制的Windows库,该客户端本身使用许多其他库。 因此,我们运送了我们的dll文件以及我们使用的dll文件。 现在的问题是,我们的客户端使用了我们也使用的某些库,但是使用了另一个版本。 因此,他不能使用我们的库,因为我们俩都依赖的库不兼容。
从技术上讲,我认为两个依赖版本都可以加载到进程空间中。 但是,我不确定如何执行此操作,因为它们的应用程序以及我们的dll都将查找相同的依赖项dll文件名。 谁能告诉我解决这个问题的最好/最干净的方法是什么?
谢谢!
您可以使用将提供的(新)附加DLL解决这类问题,并负责处理(在运行时)版本冲突-作为应用程序及其依赖项之间的一种代理。
一种替代方法是使用Windows 转发的库机制 。
转发器是容纳从一个DLL到另一个DLL的功能的便捷方法
您可以使用多种方式声明转发器,例如模块定义( .def
)文件和#pragma
:
#pragma comment(linker, "/export:function=otherdll.function")
一般来说,它不会起作用。 这是由于以下事实:第三方DLL版本在加载到内存时可能会相互干扰。 一个示例可以是,如果在特定目录中存在诸如文件之类的专有资源。 或特定的设备。 问题是,没有人甚至可能都不知道第三方DLL的制造商-因此必须进行广泛的测试。
但是也许您很幸运,它仍然可以工作。 我的食谱:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.