[英]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.