У нас есть приложение, которое зависит от количества групп сторонних DLL. К сожалению, ни один из авторов этих сторонних DLL не назвал их очень последовательно, поэтому трудно понять, какая DLL является частью какой группы.Как я могу организовать сторонние DLL-файлы Windows в подпапку в папке моего приложения?
Чтобы попытаться управлять этим, мы хотели бы поместить группы сторонних 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 и выше).
Update
Мы использовали манифесты, чтобы сделать это в конце концов (спасибо @ Крис) - там было несколько других обручей мы должны были перепрыгивать через в случае, если кто-то ищет решение!
Во-первых, наша сборка фактически имеет несколько 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. манифест» должна включать в себя все файлы 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
id интересно узнать, что такое обручи? я пытался охватить все соответствующие базы :) –