编写、加载和存取插件程序(Plug-Ins)
2006-07-22 22:58:24 来源:WEB开发网核心提示: 一旦你加载了插件,那么如何使用它们呢?这样依赖于你的应用程序,编写、加载和存取插件程序(Plug-Ins)(7),一般你会有一些像下面这样的典型代码:PLUGINLIST& pl = theApp.m_plugins.m_objects;for (PLUGINLIST::iterator
一旦你加载了插件,那么如何使用它们呢?这样依赖于你的应用程序,一般你会有一些像下面这样的典型代码:
PLUGINLIST& pl = theApp.m_plugins.m_objects;
for (PLUGINLIST::iterator it = pl.begin(); it!=pl.end(); it++) {
Object* obj = *it;
ITextPlugin* plugin = dynamic_cast<ITextPlugin*>(obj);
plugin->DoSomething();
}
}
(PLUGINLIST 是一个 typedef,用于 vector<gcroot<Object*>>)。PGEdit 的 CMainFrame::OnCreate 函数有一个类似这样的循环,添加每个插件的 MenuName 到 PGEdit 的 Edit 菜单。CMainFrame 指定命令 IDs 从 IDC_PLUGIN_BASE 开始。Figure 7 示范了视图是如何使用 ON_COMMAND_RANGE 来处理命令的。具体细节请下载源代码。
void CMyView::OnPluginCmdUI(CCmdUI* pCmdUI)
{
CEdit& edit = GetEditCtrl();
int begin,end;
edit.GetSel(begin,end);
pCmdUI->Enable(begin!=end);
}
我已展示了 PGEdit 是如何加载和存取插件的,但你要如何实现插件呢?那是很容易的事情。首先生成一个定义接口的程序集——本文的例子中就是 TextPlugin.dll。该程序集不实现任何代码或类,仅仅定义接口。记住,.NET 是语言中立的,所以没有源代码,与 C++ 头文件完全不同。相反,你生成定义接口的程序集并将它分发给编写插件的开发人员。插件与该程序集链接,于是他们从你提供的接口派生。例如,下面的 C# 代码:
using TextPlugin;
public class MyPlugin : ITextPlugin
{
... // implement ITextPlugin
}
Figure 8 展示了用 C# 编写的 PluginCaps 插件。正像你所看到的,它十分简单。有关细节请参考本文的源代码。
更多精彩
赞助商链接