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

编写、加载和存取插件程序(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 插件。正像你所看到的,它十分简单。有关细节请参考本文的源代码。

上一页  2 3 4 5 6 7 

Tags:编写 加载 存取

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