gpt4 book ai didi

c++ - dll依赖版本冲突

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:29 25 4
gpt4 key购买 nike

我在 Visual Studio 2008 Express 中使用 C++。

我们正在向客户端提供一个纯二进制 Windows 库,该客户端本身使用许多其他库。因此,我们发送了我们的 dll 文件以及我们使用的 dll 文件。现在的问题是我们的客户使用了我们也使用的一些库,但使用的是另一个版本。因此他不能使用我们的库,因为我们所依赖的库是不兼容的。

从技术上讲,我认为应该可以将两个依赖版本都加载到进程空间中。但是,我不确定如何执行此操作,因为它们的应用程序以及我们的 dll 都在寻找相同的依赖 dll 文件名。谁能告诉我处理这个问题的最好/最干净的方法是什么?

谢谢!

最佳答案

一般来说是行不通的。这是因为第三方 DLL 版本在加载到内存中时可能会相互干扰。一个例子可能是是否有一种独占资源,例如特定目录中的文件。或特定设备。问题是,可能没有人知道第 3 方 DLL 的制造商 - 因此需要进行广泛的测试。

但也许您很幸运,而且它仍然有效。我的食谱:

  1. 将您的 DLL“DTAG.DLL”和所有需要的 DLL 放在应用程序目录的子目录中,并使用固定名称,例如“DTAG_LIB”。
  2. 手动编写导入库(还有其他使用 DELAYLOAD 的可能性)。在该库中使用 LoadLibraryEx 加载您的 DLL。提供以“DTAG_LIB\DTAG.DLL”和标志 LOAD_WITH_ALTERED_SEARCH_PATH 结尾的绝对路径。然后,Windows 将从该目录加载您的 DTAG.DLL,并从该目录加载所有需要的 DLL。不要将 PATH 设置为“DTAG_LIB”!
  3. 您的客户必须链接到您的手动导入库。

关于c++ - dll依赖版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com