我在Visual Studio 2008 Express中使用C ++。
我们正在向客户端提供仅二进制Windows库,该客户端本身使用许多其他库。因此,我们发送了我们的dll文件以及我们使用的dll文件。现在问题是我们的客户端使用了我们也使用的一些库,但是在另一个版本中。因此他不能使用我们的库,因为我们都依赖的库是不兼容的。
从技术上讲,我认为应该可以将两个依赖版本加载到进程空间中。但是,我不确定如何执行此操作,因为它们的应用程序以及我们的dll都会查找相同的依赖项dll文件名。谁能告诉我解决这个问题最好/最干净的方法是什么?
谢谢!
答案 0 :(得分:0)
你可以使用你将提供的(新的)附加DLL解决这类问题,并且会处理版本冲突(在运行时) - 作为应用程序及其依赖项之间的一种代理。
另一种方法是使用Windows Forwarded Libraries mechanism。
转发器是一种方便的方式来容纳从一个DLL移动到另一个DLL的功能
您可以使用多种方式声明转发器,例如模块定义(.def
)文件和#pragma
:
#pragma comment(linker, "/export:function=otherdll.function")
答案 1 :(得分:0)
一般来说,它不起作用。这是因为第三方DLL版本在加载到内存时可能会相互干扰。一个例子可能是,如果存在专用资源,例如,特定目录中的文件。或特定设备。问题是,没有人知道甚至可能不是第三方DLL的制造商 - 因此需要进行大量的测试。
但也许你很幸运,无论如何它都有效。我的食谱: