使用 C++/MFC 和 C# 中的插件扩展 C++/MFC 应用程序

Posted

技术标签:

【中文标题】使用 C++/MFC 和 C# 中的插件扩展 C++/MFC 应用程序【英文标题】:Extend a C++/MFC application with plugins in C++/MFC and C# 【发布时间】:2013-02-26 20:29:58 【问题描述】:

我想知道如何最好地开发一个插件框架,您可以在其中开发同时使用 C++/MFC 和 C# 的插件。

主机程序是用原生 C++/MFC 开发的现有程序。为了扩展这个程序的功能,到目前为止,我们已经在 C++/MFC 和 C# 中开发了单独的程序,它们作为单独的应用程序或 Windows 服务运行。这些程序现在通过文件与主机应用程序通信。这显然是一种相当笨拙的方法,因此我们希望将它们置于一个通用的插件框架下。

每个程序也有单独的设置管理。因此,我们希望每个插件都扩展主机应用程序中的设置窗口,以便可以在一个地方管理所有设置。我们怎样才能以一种灵活而简单的方式做到这一点?

【问题讨论】:

【参考方案1】:

(...) 因此,我们希望将它们置于一个通用的插件框架下。 (...)

您可以通过在类型库中创建一组 COM 接口来做到这一点,您可以将其包装在 C++/MFC dll 项目中。然后,您可以从 C++ 或 C# 导入此类型库并创建实现预定义接口的新 COM 类。这些方法的两个缺点是: 1- 您的主应用程序需要以某种方式知道类 ID 以创建 COM 类的实例。 2- 您的插件需要在系统上注册,或者您需要提供manifest files。

(...) 因此我们希望每个插件都在 主机应用程序,以便可以在一个地方管理所有设置。 (...)

这个有点棘手,但是您可以尝试为每个插件设置一个选项卡的选项卡控件,然后在初始化期间将相应选项卡的窗口句柄传递给每个插件,然后使用它来在其上放置一个 ActiveX 控件。在 MFC 中创建 ActiveX 控件有很好的文档,这里有一个示例项目可以在 C# 中执行相同的操作:CSActiveX Sample

【讨论】:

以上是关于使用 C++/MFC 和 C# 中的插件扩展 C++/MFC 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

用 C# 重写 MFC DLL?

C# & C++ MFC : 使用文件夹文件计数和顺序创建书页

编程方面,语言用 C/C++,想做个界面,不想用 MFC,除 了QT,还有啥好的做界面的方法吗?

MFC dll 中的访问冲突(用 C++/CLI 包装)从 C# 程序开始

MFC 应用程序中的 C# 控件

C++/CLI 包装器尝试使用 MFC CObject 继承