如何从C ++ DLL动态加载C#dll

我有一个C ++应用程序。 这支持用户的C ++插件DLL,它将动态加载这些DLL,然后能够动态创建和使用用户的类型。 这些用户类型派生自主应用程序核心库中定义的基本类型和接口,因此我将用户的对象作为指向基类的指针,并调用用户的虚函数以使其发生魔力。

现在我想扩展插件DLL以允许托管DLL(我主要关心C#)。 我想在C#插件DLL中发生所有相同的魔术。

我怎样才能动态加载这些dll,有些我认为我目前使用的win32的LoadLibrary会对托管DLL感到满意。 我无法在编译/链接时访问这些库,它们来自用户。

在我加载库之后,不幸的是我怀疑COM在我将来作为调用派生函数的方式。 可能我可以使用我一直在阅读的CLI / C ++包装器,但我在这里非常缺乏经验,并希望得到任何建议或指向相应文章的链接。

另一种方法是创建一个托管C#类的C ++ / CLI项目,并将其用作C ++项目中的桥梁。

这个方法的一些链接:

  • 使用c ++ / cli桥连接c ++和c#代码
  • .NET到C ++ Bridge

最新链接具有简单的桥接源代码

你要做的就是在你的过程中启动一个CLR实例。 看一下关于CLR托管的这篇文章

以下是一些描述我的解决方案的幻灯片。

https://docs.google.com/presentation/pub?id=1YoJRGnveh4By7ym4GL19L7OzYOFORZQB6RgJEPVfFb8&start=false&loop=false&delayms=3000

我的解决方案是拥有一个win32插件dll,通过正常方式(LoadLibrary)加载,链接到混合C ++ / CLI dll,链接到纯托管C#代码。 我允许使用A LOT锅炉板以及基于Padu给出的链接的双c ++ / cli桥接模式两种方式进行调用。 细节相当复杂,但最终API用户的工作非常简单,这是我的目标。 托管插件对象编写器只是从一个对象派生而来,一切正常。

基本上我创建了一个提供“混合模式伪inheritance”的模式现在我的c#对象派生自c ++中的基类。