0

我正在从托管 C++ 应用程序调用 C# dll。C# dll 将位于自定义文件夹中,因此我需要托管 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 中可能存在的配置问题。

4

2 回答 2

0

Use Assembly.AssemblyResolve to retrieve your assembly which has already been loaded.

于 2012-05-04T07:56:03.977 回答
0

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

于 2012-05-04T07:35:43.033 回答