在与C+不同的路径中引用C#Assembly+/CLI动态链接库

在与C+不同的路径中引用C#Assembly+/CLI动态链接库,c#,dll,c++-cli,C#,Dll,C++ Cli,我想为一个软件写一个插件,它加载普通的32位DLL作为插件 因为我在C#方面的经验要好得多,所以我计划将C++/CLI程序集用作 然后将函数调用委托给“real”C#插件的包装器 但我有一个问题。我测试了C++/CLI DLL是否正确加载。 现在,我添加了C#程序集作为对C++/CLI DLL的引用。问题是,当我把C#DLL放在同一个目录中时,软件想直接将其作为插件加载,软件就会崩溃。如果我将C#DLL放在子目录中,C++/CLI DLL将找不到它 我尝试了在web上找到的不同解决方案,让C++

我想为一个软件写一个插件,它加载普通的32位DLL作为插件

因为我在C#方面的经验要好得多,所以我计划将C++/CLI程序集用作 然后将函数调用委托给“real”C#插件的包装器

但我有一个问题。我测试了C++/CLI DLL是否正确加载。 现在,我添加了C#程序集作为对C++/CLI DLL的引用。问题是,当我把C#DLL放在同一个目录中时,软件想直接将其作为插件加载,软件就会崩溃。如果我将C#DLL放在子目录中,C++/CLI DLL将找不到它

我尝试了在web上找到的不同解决方案,让C++/CLI程序集在子目录中找到C#程序集,但它们都不起作用:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="DLL" />
  </assemblyBinding>
</runtime>

不起作用。在创建C++/CLI DLL时,似乎忽略了app.config

添加AppDomain.CurrentDomain.AppendPrivatePath(“DLL”)作为程序集中的第一个命令不起作用,因为DLL只有直接的函数调用,并且没有什么像真正的“入口点”

我发现的另一件事是将方法
Assembly currentDomain\u AssemblyResolve(对象发送方,ResolveEventArgs args)
放在DLL中。但是我无法让编译器识别Assembly关键字,尽管我使用了
使用namespace System::Reflection


因此,如果有人知道如何使其工作,我将不胜感激。

在调用任何使用托管dll的函数之前,调用
汇编::Load(path_to_managed_dll)

如果使用我的

我听说有人在我的基础上编写模板来创建第三方插件。
我见过的最新的是

编辑: 即使使用C#创建普通DLL,也可能需要引用其他程序集。
但是,似乎您可以使用C来解决问题,因此您也可以从那里使用AssemblyResolve。

我认为如果它起作用,这将是创建。但是你的模板链接对我不起作用。你说的“不起作用”是什么意思?它应该指向底部,你可以找到模板。得到的只是一个空页面,也没有源代码。链接可以在IE上使用,但不能在我的Firefox4上使用。你的模板可以使用。谢谢虽然这可能有点离题:由于软件使用char*作为文本,我必须用“return(char*)Marshal.StringToHGlobalAnsi(“text”)返回它们”。但我如何保证它们在使用后得到释放呢。我无法确定这是当前函数调用,因为它是返回值。您应该能够只返回一个字符串。字符串的默认编组是指向Ansi字符的指针。按照约定,调用方应该释放返回的字符串。否则会很奇怪。