我从托管C ++应用程序调用C#dll。 C#dll将位于自定义文件夹中,因此我需要Managed C ++ dll动态加载该文件夹中的C#。
这是VC ++ 2010 v100和.net 4.0。
我打算用
Assembly::LoadFrom("MyCSharp.dll")
我可以看到LoadFrom调用成功并加载MyCSharp.DLL,但是当我的托管C ++ dll中的函数试图访问该DLL的任何功能时,它可以:
a)如果MyCSharp.DLL与我的应用程序不在同一个执行文件夹中,则会失败
b)如果执行文件夹中存在MyCSharp.dll,则成功,但是,现在我已经将两个副本加载到内存中,我显然没有访问从我的:: LoadFrom调用加载的那个。
我不确定是什么阻止了执行函数链接到显式加载的C# - dll。
我怀疑它是VC ++托管的c ++ dll中可能存在的配置问题,我不知道。
答案 0 :(得分:0)
如果您的Dll位于子目录中,则需要将该文件夹添加到AppDomain的专用路径中。据我所知,创建AppDomain后无法更改,因此您需要使用<probing> Element
将其添加到app.config。
答案 1 :(得分:0)
使用Assembly.AssemblyResolve检索已加载的程序集。