Я хочу написать плагин для программного обеспечения, которое загружает обычные 32-битные DLL в качестве плагинов.
Поскольку мой опыт работы с C # намного лучше, я планировал использовать сборку C ++ / CLI в качестве оболочки, которая затем делегируетфункция вызывает реальный плагин C #.
Но у меня есть проблема с этим.Я проверил, что C ++ / CLI DLL загружается правильно.Теперь я добавил сборку C # в качестве ссылки на C ++ / CLI DLL.Проблема в том, что когда у меня есть C # DLL в той же директории, Программное обеспечение хочет загрузить его как плагин напрямую, и Программное обеспечение вылетает.Если я помещаю C # DLL в подкаталог, он не может быть найден C ++ / CLI DLL.
Я попробовал различные решения, которые я нашел в Интернете, чтобы позволить C ++ / CLI Assembly найти C # Assembly в подкаталоге., но все они не работали:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="DLL" />
</assemblyBinding>
</runtime>
Не работал.Кажется, что app.config игнорируется при создании DLL C ++ / CLI.
Добавление AppDomain.CurrentDomain.AppendPrivatePath("DLL");
, поскольку первая команда в сборке не работает, так как DLL имеет только прямые вызовы функций, и ничего подобногореальная «точка входа».
Еще одна вещь, которую я нашел, - это размещение метода Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
в DLL.Но я не смог заставить компилятор распознать ключевое слово Assembly, хотя я использовал using namespace System::Reflection;
.
Так что я был бы благодарен, если кто-нибудь знает, как заставить это работать.