我們有一個應用程序依賴於許多第三方DLL組。不幸的是,這些第三方DLL的編寫者都沒有對它們進行非常一致的命名,所以很難看出哪個DLL是什麼組的一部分。如何將第三方Windows DLL組織到我的應用程序文件夾中的子文件夾中?
爲了嘗試和管理這個,我們希望將第三方DLL組放在應用程序文件夾的一個文件夾中,而不是像這樣在應用程序旁邊。
--> Application Folder
--> Application.exe
--> MyDLL1.dll
--> MyDLL2.dll
--> Third Party 1 DLL folder
--> Third Party 1 DLL 1.dll
--> Third Party 1 DLL 2.dll
--> Third Party 1 DLL 3.dll
--> Third Party 2 DLL folder
--> Third Party 2 DLL 1.dll
--> Third Party 2 DLL 2.dll
--> Third Party 2 DLL 3.dll
我的問題是如何讓動態鏈接器找到它們並加載它們?
我們可以使用LoadLibrary()和GetProcAddress()手動執行此操作,但這非常繁瑣。看起來我們可以用清單和「探索」來做到這一點,但是這似乎只是Windows 7(我們需要在XP及更高版本上工作)。
更新
我們用來體現這樣做到底(感謝@克里斯) - 有一對夫婦,我們必須在任何情況下,通過跳是尋找一個解決方案的其他箍!
首先,我們的「程序集」實際上有幾個DLL,我們鏈接到一個鏈接,然後鏈接到其他鏈接。所有這些DLL都需要將程序集依賴項添加到它們的清單中(可以使用mt.exe來執行此操作,而無需訪問這些DLL的源代碼)。
其次,程序集需要與DLL並行,而不是與EXE一起 - 我們的DLL實際上是一個已經在應用程序子文件夾中的插件。
這裏是我們的最終佈局:
--> Application Folder
--> Application.exe
--> Plugins folder
--> MyDLL1.dll
--> Third Party 1
--> Third Party 1.manifest
--> A.dll
--> B.dll
--> C.dll
如果MyDLL1.dll是一個插件,鏈接到A.DLL,並A.DLL鏈接到兩個B.DLL和C.dll,則:
- 「第三方1.manifest」需要包括所有A.DLL,B.DLL和C.dll作爲一個組件
- 「MyDLL1.dll」需要在其清單中的「第三方1」或依賴項動態鏈接程序不會找到A.dll
- A.dll需要其清單中的依賴項條目爲「第三方1」或動態鏈接程序不會找到B.dll和C.dll
- 「第三方1」文件夾需要與「MyDLL1.dll 「,不是旁邊的」Application.exe「
對我而言,(3)有點刺激。你會認爲鏈接器會在程序集中尋找依賴的DLL。
我們最終使用了這個答案 - 還有一些其他的箍環我們不得不跳過,以防有人在尋找解決方案! – Bids 2010-11-12 11:49:33
編號有興趣知道什麼是過度的籃球?我試圖涵蓋所有相關的基地:) – 2010-11-12 17:43:33