WEB开发网
开发学院软件开发VC 编写、加载和存取插件程序(Plug-Ins) 阅读

编写、加载和存取插件程序(Plug-Ins)

 2006-07-22 22:58:24 来源:WEB开发网   
核心提示: 这就是我现在要讲的 AppDomains,接下来我将描述一个非常简单的插件模型,编写、加载和存取插件程序(Plug-Ins)(5),它不需要 AppDomains,假设你生成了一个图像编辑器,PGEdit 的三个插件被添加到 Edit 菜单的情形,Figure 5 带有三个插件的 PGEd

这就是我现在要讲的 AppDomains。接下来我将描述一个非常简单的插件模型,它不需要 AppDomains。假设你生成了一个图像编辑器,并且你想让其他开发人员编写插件来实现诸如曝光、模糊或使部分像素变绿等特效。 此外,如果你拥有数据库所有权,你想让别的开发人员编写专门的导入/导出过滤器,以便对你的数据和他们自定义的文件格式之间进行转换。在这种情况下,应用程序在启动时加载所有的插件,插件一直保留加载状态,也就是说一直到用户退出程序。该模型不需要服务器程序具备重新加载功能,插件与应用程序本身具有相同的安全许可。所以没有必要使用 AppDomains;所有插件可被加载到主应用程序域中。这是桌面应用程序典型的使用模式。

为了真正实现这个模型,首先要定义每个插件必须实现的接口。接口实际上就像是 COM 的接口,它是一个抽象基类,在这个类中定义了插件必须实现的属性和方法。在本文的例子中,我顺便写了一个可扩展的文本编辑器,名叫 PGEdit,它带有一个插件接口 ITextPlugin(参见 Figure 4)。ITextPlugin 有两个属性,MenuName 和 MenuPrompt, 以及一个方法 Transform,该方法带一个串参数,对传入的字符串进行处理,然后返回新的串。我为 PGEdit 实现了三个具体的插件:PluginCaps,PluginLower 和 PluginScramble,其功能分别是大写,小写和打乱文本字符。如 Figure 5 所示,PGEdit 的三个插件被添加到 Edit 菜单的情形。

Figure 5 带有三个插件的 PGEdit

我编写了一个类叫 CPluginMgr,它负责管理插件(参见 Figure 6)。PGEdit 启动时调用 CPluginMgr::LoadAll 加载所有插件:

上一页  1 2 3 4 5 6 7  下一页

Tags:编写 加载 存取

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接