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

标签 c# c++ plugins mfc c++-cli

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

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

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

最佳答案

(...) we therefore wish to bring them under a common plug-in framework. (...)

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

(...) We therefore want each plugin to expand the settings window in the host application so that all settings can be managed in one place. (...)

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

关于c# - 使用 C++/MFC 和 C# 中的插件扩展 C++/MFC 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15098668/

相关文章:

c# - 如何使用 C# 以编程方式将 html 字符串直接传递给 Web 浏览器?

C# 性能 - 使用 AppendAllText 分块写入文件

c++ - 检查类是否继承自模板的任何模板实例化

c++ - abs(unsigned long) 有什么意义吗?

plugins - 跨浏览器插件框架的比较

eclipse - 我在新安装的 Eclipse 中找不到插件项目?帮助

qt - QPluginLoader 方法的缺点是什么?

c# - 始终以管理员身份运行使用 Windows 桌面桥转换的应用程序?

c# - WPF 从 DataTrigger 调用方法

c++ - 是否可以默认传递 "this"?