我的插件使用Visual Studio以c ++编写。 我们的产品中有几个插件。我们的插件exe使用的一个版本的spotabcXXXX.dll位于存在我们exe的bin文件夹中,另一个插件也使用的另一个版本的spotabcXXXX.dll位于不同的位置。
独立运行插件时,它使用的是spotabcXXXX.dll,位于我们的bin中。但是,当我们运行整个产品时,我们的插件不是从bin中引用spotabcXXXX.dll,而是从其他位置引用。 我们的产品架构:
C:\Spot
-->CommonFiles
----->spotabcXXXX.dll
-->OurPlugin
----->spotabcXXXX.dll
由于CommonFiles首先出现(不知道任何原因),因此我们的插件从CommonFiles中获取spotabcXXXX.dll。 我们没有以编程方式使用LoadLibrary。
请帮助我如何从我们的垃圾箱中加载dll。
答案 0 :(得分:0)
您需要检查DLL搜索顺序及其与您的“整个产品”及其位置的关系;请参阅:https://docs.microsoft.com/en-us/windows/desktop/dlls/dynamic-link-library-search-order
答案 1 :(得分:0)
Side-by-Side Assemblies和Activation Contexts可以用来解决这种情况。
如果您的插件静态加载spotabcXXXX.dll
,则可以为其定义一个SxS清单,该清单指定要依赖的特定spotabcXXXX.dll
版本。加载插件后,操作系统加载器将加载并绑定清单指定的依赖DLL。
如果您的插件动态加载spotabcXXXX.dll
,则可以创建依赖于所需spotabcXXXX.dll
特定版本的激活上下文,然后可以在调用LoadLibrary()
之前激活上下文。
无论哪种方式,即使调用过程的其他部分希望使用其他版本的spotabcXXXX.dll
,您的插件也将绑定到该版本的spotabcXXXX.dll
。