从不同的文件夹中加载具有相同依赖DLL的相同DLL

时间:2019-03-27 09:13:09

标签: c++ dll

例如,经过一些重构后,我想从不同的子文件夹加载相同的DLL以比较结果。我要加载的DLL有一些依赖的DLL链接到它,因此它们是隐式加载的。 为了简化工作并保持DLL的概述,我将它们组织在当前工作目录下的不同子文件夹中。所以我有以下结构:

CurrentWorkingDirectory
-> MyApp.exe
-> DllSubDir1
---> ManuallyLoaded.dll
---> DynamiclyLinked.dll
-> DllSubDir2
---> ManuallyLoaded.dll
---> DynamiclyLinked.dll

我设法通过使用LoadLibraryExA和指向不同DLL的绝对路径来加载了ManuallyLoaded.dll的两个不同版本。因此,我可以在调试器中看到两个已加载的ManuallyLoaded.dll实例。

但是,很不幸,DynamiclyLinked.dll仅被加载一次。

要在进行一些重构后比较ManuallyLoaded.dll的各个方面,我还想加载DynamiclyLinked.dll的潜在不同版本。有没有一种方法可以强制应用程序从不同的文件夹隐式加载相同的DLL?还是我需要重命名DynamiclyLinked.dll的潜在不同版本?

1 个答案:

答案 0 :(得分:0)

经过一段时间的调查和测试,我终于在这里找到了可能的解决方案:https://stackoverflow.com/a/5018526/11264951

就我而言,有必要

  1. 将DynamicLinked.dll的依赖清单添加到ManuallyLoaded.dll。例如,具有这样的实用性。但是请注意在ManuallyLoaded.dll的cpp文件之一中执行此操作。因为如果在h文件之一中执行此操作,则exe会丢失丢失的清单。我假设在编译期间,pragma所添加的所有内容都会添加到exe中。
#pragma comment(linker, "/manifestdependency:\"acme.common'processorArchitecture='*' version='1.0.0.0' type='win32'\"")
  1. 通过在属性中设置相应的设置,在ManuallyLoaded.dll的清单中构建。