平台插件学习

最近因开发需要拜读了网上几篇关于平台与插件的大作,对其思想有了初步的了解。

归纳一下平台主要需要解决以下几个问题:

1、定义好插件需要实现的接口;

2、枚举加载计算机中可用于本平台的插件;

3、加载可用插件并动态加载插件的菜单及工具栏,或其他GUI资源;

4、管理动态菜单及工具栏的命令调用,及其他GUI的右键菜单等等命令调用;

5、平台与插件的数据交互;

6、插件卸载等等;

下面细说一下以上几个要点。

定义接口:

主要是定义好平台需要调用的几个公共方法,并通过这些方法的调用获取插件必须的一些信息,如插件实现什么功能,提供了哪些菜单工具栏命令等,及命令调用的方法;

枚举插件:

即查询注册表的组件目录方法获取事先约定好的组件目录下注册的插件;

ICatInformationPtr pICatInformation(CLSID_StdComponentCategoriesMgr);
IEnumCLSID
*  pIEnumCLSID  =  NULL ;
CATID catid 
=  CATID_PLATFORMCMD;  //  约定的组件目录guid
HRESULT hr  =  pICatInformation -> EnumClassesOfCategories( 1 & catid,  0 , NULL,  & pIEnumCLSID);

if  (FAILED(hr))
{
return S_FALSE;
}

CLSID clsid;
//  枚举插件
while  ((hr  =  pIEnumCLSID -> Next( 1 & clsid, NULL))  ==  S_OK)
{
// 可以在此创建并加载插件获取插件的信息
}

加载插件的菜单及工具栏和其他GUI资源:

插件的GUI菜单和工具栏资源,可以像在主工程的菜单和工具栏资源一样在插件资源中编辑好,然后由平台加载到框架。其他的GUI资源可以约定一些设置由平台来创建。

插件命令调用:

平台在插件的菜单与工具栏加载过程中对原有的命令id进行偏移并记录偏移后的命令与原命令的映射,以便平台来调用插件的方法;

平台与插件的数据交互:

平台与插件数据交换;可以很简单也可以很复杂,目前我所能想到的最简单的方法是定义一个接口,此接口实现一对数据名称与数据的映射的存取;

插件卸载:

很简单没有什么好说的......

说了这么多废话源代码最重要;

我已实现了一个简单的测试例子本

没有加载插件时:

加载2个插件后:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值