我有一个C ++应用程序。这支持用户的C ++插件DLL,它将动态加载这些DLL,然后能够动态创建和使用用户的类型。这些用户类型派生自主应用程序核心库中定义的基类型和接口,因此我将用户的对象作为指向基类的指针,并调用用户的虚函数以使其发生魔力。
现在我想扩展插件DLL以允许托管DLL(我主要关心C#)。我想在C#插件DLL中发生所有相同的魔术。
我如何动态加载这些dll,有些我认为我正在使用的win32的LoadLibrary会对托管DLL感到满意。我无法在编译/链接时访问这些库,它们来自用户。
在我加载库之后,遗憾的是我怀疑COM是将来作为调用派生函数的方法。可能我可以使用我一直在阅读的CLI / C ++包装器,但我在这里非常缺乏经验,并希望得到任何建议或指向相应文章的链接。
答案 0 :(得分:2)
你要做的是基本上在你的过程中启动CLR的一个实例。 请查看CLR hosting
上的这篇文章答案 1 :(得分:2)
另一种方法是创建一个承载C#类的C ++ / CLI项目,并将其用作C ++项目中的桥梁。
此方法的更多链接:
最新的链接有简单的桥梁源代码
答案 2 :(得分:0)
以下是一些描述我的解决方案的幻灯片。
我的解决方案是拥有一个win32插件dll,通过正常方式(LoadLibrary)加载,链接到混合C ++ / CLI dll,链接到纯托管C#代码。我允许使用A LOT锅炉板以及基于Padu给出的链接的双c ++ / cli桥接模式两种方式进行调用。细节相当复杂,但最终API用户的工作非常简单,这是我的目标。托管插件对象编写器只是从一个对象派生而来,一切正常。
基本上我创建了一个提供“混合模式伪继承”的模式现在我的c#对象派生自c ++中的基类。