7

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

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

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

在我加载库之后,不幸的是,我怀疑 COM 在我的未来是调用派生函数的方式。可能我可以使用我一直在阅读的 CLI/C++ 包装器,但我在这里非常缺乏经验,如果有任何建议或指向适当文章的链接,我将不胜感激。

4

3 回答 3

2

你要做的基本上是在你的进程中启动一个 CLR 实例。看看这篇关于CLR 托管的文章

于 2011-06-01T20:48:25.707 回答
2

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

此方法的更多链接:

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

于 2011-06-01T21:09:38.717 回答
0

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

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 用户的工作非常简单,这就是我的目标。托管插件对象编写器只是从一个对象派生而来,一切正常。

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

于 2012-04-25T16:20:32.590 回答