我正在用本地C++编写Windows应用程序插件(作为DLL)。我们称之为myplugin.dll
。我的插件引用另一个DLL,我们将其称为other.dll
。由插件DLL引用的DLL的搜索路径
我的插件是安装在myplugin
子目录中的应用程序的plugins
目录:
application.exe
plugins\
myplugin\
myplugin.dll
myplugin.dll
链接隐式other.dll
。我不能延迟加载other.dll
,因为它公开虚拟方法的类,并且虚拟方法表被视为数据,它们不能从延迟加载的DLL中导入。
我自然会喜欢的地方other.dll
在plugins\myplugin
目录,旁边myplugin.dll
,但默认情况下为other.dll
(source)搜索时,Windows会不会看在plugins\myplugin
。
这里有什么我的选择,除了将other.dll
放在应用程序的根目录?
(虽然Altering DLL search path for static linked DLL这个问题是相关的,但它描述了一个不太合理的场景:应用程序隐式链接到插件DLL。我相信一个清晰的典型场景可能有助于揭示其他解决方案常见的问题,如明确加载other.dll
时myplugin.dll
被应用程序加载,如果这将是可能的)
编辑:另一个类似的问题:Plugin DLLs that depend on other DLLs
编辑:我发现了一个解决问题的方法,请参阅下面接受的答案。据我所知,这是最干净的解决方案。我希望它能帮助别人。
如何在PATH上的目录中找到?您发布的链接完全是这样说的。 – PaulMcKenzie
可能重复的[改变静态链接DLL的DLL搜索路径](http://stackoverflow.com/questions/3832290/altering-dll-search-path-for-static-linked-dll) – gdlmx
@PaulMcKenzie感谢您致力于改变PATH是非常具有侵入性的,可能有副作用,并且基本上需要安装程序(即不再可能实现纯粹的“xcopy-deployment”)。 –