从Managed C ++ dll调用Assembly :: LoadFrom

时间:2012-05-04 07:23:46

标签: c# dll managed-c++

我从托管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中可能存在的配置问题,我不知道。

2 个答案:

答案 0 :(得分:0)

如果您的Dll位于子目录中,则需要将该文件夹添加到AppDomain的专用路径中。据我所知,创建AppDomain后无法更改,因此您需要使用<probing> Element将其添加到app.config。

答案 1 :(得分:0)

使用Assembly.AssemblyResolve检索已加载的程序集。