演练:公开 .NET 插件模型
更新:2007 年 11 月
本演练演示如何使用 .NET 技术扩展传统的 Scribble MFC 示例以支持插件模型。
MFC 随意画图解决方案被扩展为公开 .NET 对象模型。。另外,本示例还公开一个插件结构,它使 .NET 插件可以无缝地与 MFC Scribble 解决方案交互。
先决条件
ScribbleDotNET 示例:使用 CLR 功能扩展随意画图功能
生成并运行此示例
在 Visual Studio 开发环境中打开解决方案文件 Scribble.sln。
使用“调试”或“发布”配置生成解决方案。
在解决方案资源管理器下打开解决方案项 plugins.xml。
在 plugins.xml 文件中,更改 Assembly 元素中路径的第一部分以与生成时所采用的配置相对应。例如,如果使用“调试”配置生成,则将“VBShapes.dll”更改为“Debug\VBShapes.dll”,并将“CSPenColor.dll”更改为“Debug\CSPenColor.dll”。
运行生成的可执行文件。
从菜单栏中选择“插件”。
- 选择“绘制形状”菜单项。这将运行 VBShapes 插件,该插件绘制三种不同颜色方形的轮廓。
从菜单栏中选择“插件”。
- 选择“更改钢笔颜色”菜单项。这将运行 CSPenColor 插件,使用该插件可以通过 .Net 颜色对话框选择钢笔颜色。
工作机制
本示例的实现包括两个主要部分:
公开一个对象模型供插件编写器使用
公开了两个主要接口以实现插件模型(有关这些接口的定义,请参见 ScribbleApp 项目):
IScribbleApp – 此接口公开一组功能,插件编写器使用这些功能可以与正在运行的 Scribble 应用程序进行交互。此接口由 Scribble 实现(请参见 Scribble 项目中的 ScribbleApp.cpp),而且会向 IScribblePlugin 的 Run() 成员函数传递所实现接口的实例(详见下文)
IScribblePlugin – 此接口由插件编写器实现。插件编写器将使用由 IScribbleApp 公开的功能来实现其插件。
扩展基础 Scribble 应用程序以查找、加载和执行插件
首先,分析包含要加载的插件列表的 XML 文件。将加载每个找到的插件,并使用 System.Reflection 验证其类型是否正确。更具体地说,使用反射在由插件模块公开的类型中搜索,并确保这些类型中的一个实现已公开的 IPlugin 接口。在 Scribble 项目的 PluginBld.cpp 中可以找到此实现。
然后 CScribbleApp 使用在 PluginBld.cpp 中实现的例程获取所有已发现插件的列表。对于此列表中的每个插件,“插件”菜单下都会动态创建一个菜单项。当用户从“插件”中选择菜单项时,将运行相应的插件。
使用的技术
使用 XML 指定插件的位置
使用反射验证 XML 文件中指定的插件的类型是否正确
定义用于创建插件的对象模型
在 C++ 应用程序中加载并运行插件