2008-12-29 91 views
1

我有一个C++ Windows应用程序,可以通过使用应用程序公开的API编写C++插件来进行扩展。还有一个将C++ API转换为Python的插件(例如,插件可以用Python编写)。使用C#插件扩展C++应用程序

我想让用户在C++和Python中编写插件。由于我对.NET世界不是很熟悉,我不确定如何实现C#插件系统。

你会推荐使用什么样的插件系统(主机是C++,C#插件)?为了实现这个目标我需要学习什么?

回答

3

使用COM对象和接口公开您的API,您将开放您的应用程序到许多开发环境,包括C#。

1

我已经在过去不同的方式做到了这一点。我发现C++/CLI是构建.Net和非托管C++之间桥梁的最佳选择(尽管如其他海报所述,另一种选择是COM)。

我已经在过去这样做的方式包括:

  1. 生成C++/CLI使用反射我的C++ API API包装代码。当然,本机C++没有反射系统,所以我们推出了自己的系统。然后,生成的C++/CLI代码被编译成C#插件会引用的程序集。
  2. 使用反射从我的C++ API生成动态程序集(即使用Reflection.Emit)。生成的程序集可以在脚本语言中使用,或者甚至可以在运行时针对它编译C#代码。程序集甚至可以写入磁盘以静态使用。这里的缺点是你可能不能发出比编译器更好的IL,所以除非你需要动态生成,否则不要走这条路。
  3. 亲手写的C++/CLI API包装器。如果API不是很大,手工编写一个包装就足够简单了。

最后,您将拥有一个用于编译C#插件的程序集。现在您需要在运行时加载插件程序集。为此,您必须托管CLR。主持CLR并不困难,虽然我只做了一次,那是几年前 - 也许时代已经发生了变化。如果您不熟悉托管CLR,那么尽可能将您的应用程序代码粘贴到DLL中,然后编写一个小型C++/CLI应用程序来调出非托管UI。现在,CLR由小型C++/CLI应用程序托管。