演练:公开 .NET 插件模型

更新:2007 年 11 月

本演练演示如何使用 .NET 技术扩展传统的 Scribble MFC 示例以支持插件模型。

MFC 随意画图解决方案被扩展为公开 .NET 对象模型。。另外,本示例还公开一个插件结构,它使 .NET 插件可以无缝地与 MFC Scribble 解决方案交互。

先决条件

ScribbleDotNET 示例:使用 CLR 功能扩展随意画图功能

生成并运行此示例

  1. 在 Visual Studio 开发环境中打开解决方案文件 Scribble.sln。

  2. 使用“调试”或“发布”配置生成解决方案。

  3. 在解决方案资源管理器下打开解决方案项 plugins.xml。

  4. 在 plugins.xml 文件中,更改 Assembly 元素中路径的第一部分以与生成时所采用的配置相对应。例如,如果使用“调试”配置生成,则将“VBShapes.dll”更改为“Debug\VBShapes.dll”,并将“CSPenColor.dll”更改为“Debug\CSPenColor.dll”。

  5. 运行生成的可执行文件。

  6. 从菜单栏中选择“插件”。

    1. 选择“绘制形状”菜单项。这将运行 VBShapes 插件,该插件绘制三种不同颜色方形的轮廓。
  7. 从菜单栏中选择“插件”。

    1. 选择“更改钢笔颜色”菜单项。这将运行 CSPenColor 插件,使用该插件可以通过 .Net 颜色对话框选择钢笔颜色。

工作机制

本示例的实现包括两个主要部分:

  1. 公开一个对象模型供插件编写器使用

    公开了两个主要接口以实现插件模型(有关这些接口的定义,请参见 ScribbleApp 项目):

    • IScribbleApp – 此接口公开一组功能,插件编写器使用这些功能可以与正在运行的 Scribble 应用程序进行交互。此接口由 Scribble 实现(请参见 Scribble 项目中的 ScribbleApp.cpp),而且会向 IScribblePlugin 的 Run() 成员函数传递所实现接口的实例(详见下文)

    • IScribblePlugin – 此接口由插件编写器实现。插件编写器将使用由 IScribbleApp 公开的功能来实现其插件。

  2. 扩展基础 Scribble 应用程序以查找、加载和执行插件

    • 首先,分析包含要加载的插件列表的 XML 文件。将加载每个找到的插件,并使用 System.Reflection 验证其类型是否正确。更具体地说,使用反射在由插件模块公开的类型中搜索,并确保这些类型中的一个实现已公开的 IPlugin 接口。在 Scribble 项目的 PluginBld.cpp 中可以找到此实现。

    • 然后 CScribbleApp 使用在 PluginBld.cpp 中实现的例程获取所有已发现插件的列表。对于此列表中的每个插件,“插件”菜单下都会动态创建一个菜单项。当用户从“插件”中选择菜单项时,将运行相应的插件。

使用的技术

  • 使用 XML 指定插件的位置

  • 使用反射验证 XML 文件中指定的插件的类型是否正确

  • 定义用于创建插件的对象模型

  • 在 C++ 应用程序中加载并运行插件

请参见

任务

SCRIBBLE 示例:MFC MDI 绘图应用程序