我正在用本地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」)。 –