繁体   English   中英

使用C ++应用程序加载dll

[英]dll loading using C++ application

我的插件使用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。

请帮助我如何从我们的bin中加载dll。

您需要检查DLL搜索顺序及其与您的“整个产品”及其位置的关系; 请参阅: https : //docs.microsoft.com/zh-cn/windows/desktop/dlls/dynamic-link-library-search-order

这就是可以使用并行程序集激活上下文解决的情况。

如果您的插件静态加载了spotabcXXXX.dll ,则可以spotabcXXXX.dll定义一个SxS清单,该清单指定对所需的spotabcXXXX.dll特定版本的spotabcXXXX.dll 加载插件后,操作系统加载器将加载并绑定清单指定的依赖DLL。

如果您的插件动态加载spotabcXXXX.dll ,则可以创建一个依赖于所需的spotabcXXXX.dll特定版本的激活上下文,然后可以在调用LoadLibrary()之前激活上下文。

无论哪种方式,你的插件将被绑定到该版本的spotabcXXXX.dll即使调用进程的其他部分要使用不同版本的spotabcXXXX.dll

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM