2016-04-26 10 views
1

Я пытаюсь ссылаться на DLL .Net (назовите его B.dll), которая в основном представляет собой оболочку для третьей стороны .Net (назовите ее C.dll), в проект C++ MFC. Я создал файл tlb для B.dll и могу создать экземпляр и вызвать его в приложении MFC.Ссылки на управляемые коды MFC

В настоящий момент все зависимости B.tlb, B.dll и C.dll должны находиться в папке приложения MFC. То, что я хочу, и изо всех сил пытаюсь сделать, состоит в том, чтобы поместить эти три файла в подпапку из папки исполнения MFC.

Я попытался установить «privatePath» конфигурационного файла B.dll в подпапку, но, как я понял, это не значит, что нужно установить «privatepath» B.dll, но приложение MFC (которое, очевидно, имеет у меня есть, насколько я знаю, поскольку это не приложение .Net)

Любая помощь приветствуется.

+1

Вы, конечно, максимизируя DLL Hell в этом сценарии, никогда нет особого смысла в этом. CLR ищет файл somename.exe.config в том же каталоге, что и somename.exe. Поэтому вы можете добавить элемент '', чтобы найти файл C.dll. B.dll можно найти только с помощью параметра/codebase в команде Regasm.exe, которую необходимо использовать для регистрации сборки или предоставления mfc-приложения манифеста с элементом ''. Использование GAC на компьютере пользователя для зависимостей COM никогда не будет плохой идеей. –

+0

Почему этот сценарий рассматривается как аддон DLL? Не могли бы вы объяснить это больше, пожалуйста? поскольку я не могу думать об этом, не создавая обертку .Net dll и регистрирую ее как COM-компонент. – ali

ответ

0

Вам не нужно использовать COM (если вам это нужно, мой ответ устарел).

Вы можете написать свою собственную библиотеку C++/CLI-обертки, которая только что экспортировала собственный интерфейс. Чем вы можете называть эту родную оболочку, и эта оболочка снова загружает ваш .Net-компонент напрямую и выполняет код в нем.

В этой DLL-библиотеке вы можете добавить ResolveEventHandler, где вы реализуете свой собственный поиск (возможно, в подкаталоге). Добавьте это в свой CurrentDomain-> AssemblyResolve

С помощью этого трюка вы обойдете весь этот материал COM, и у вас есть полный контроль над сборками, которые нужно искать, чтобы их нельзя было загрузить.

У меня есть решение от here