用于二次开发平台的基于控件的插件管理系统及方法转让专利

申请号 : CN200510098550.2

文献号 : CN100593156C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙庆文

申请人 : 北京灵图软件技术有限公司

摘要 :

本发明提供一种用于二次开发平台的基于控件的插件管理系统及方法,包括封装有内部功能模块的控件、至少一个具有用户自定义外部功能的插件、接口协议模块,以及插件管理器,所述插件管理器包括插件加载模块、插件链模块,插件查询模块,本发明首先根据控件的标准接口,提供一个与所述控件的通讯连接与事件响应相符合的接口协议;然后遵照所述接口协议,提供至少一个具有用户自定义外部功能的插件;在所述控件中维护有一个插件链,当应用程序启动时,由控件调用所述接口协议,将所述插件加载入插件链中。本发明使用户在二次开发过程中,可以根据自身需要而加载并使用原有控件所不具有的新功能。

权利要求 :

1、一种用于二次开发平台的基于控件的插件管理系统,包括封装有内 部功能模块的控件,其特征在于,还包括:至少一个具有用户自定义外部功能的插件;

接口协议模块,用以根据控件的标准接口,为所述插件提供通讯连接与 事件响应的接口协议;

插件管理器,用以将所述至少一个插件组织起来供外部程序调用,该插 件管理器包括:插件加载模块,用于将所述插件加载到所述控件中;

插件链模块,用于依序保存加载入控件的插件;

插件查询模块,用于根据外部程序指令,查找保存入所述插件链模 块中的插件。

2、如权利要求1所述的系统,其特征在于,所述插件管理器,位于所 述控件之中。

3、如权利要求1所述的系统,其特征在于,通过所述接口协议模块提 供的接口协议,所述插件的接口定义符合所述控件的标准接口定义。

4、如权利要求1所述的系统,其特征在于,所述接口协议模块,包括:连接协议单元,用以提供插件中的功能定义、事件定义以及通知控件加 载,包括:插件加载入口单元,用以说明插件的功能、加载事件定义,并通知 控件做联桥;

插件卸载入口单元,用以通知控件断开联桥,卸载事件定义;及插件退出入口单元,用以通知控件有插件开始退出并释放该插件所 占用的内存控件;及事件协议单元,用以提供用户与系统的交互操作,提供的事件包括:应 用程序事件、文档事件、视口事件、场景事件;所述视口事件是指用于处理 窗口消息的事件。

5、一种在权利要求1所述二次开发平台的基于控件的插件管理系统进 行插件管理的方法,其特征在于,该方法包括如下步骤:根据控件的标准接口,提供一个与所述控件的通讯连接与事件响应相符 合的接口协议;

遵照所述接口协议,提供至少一个具有用户自定义外部功能的插件;

在插件链模块中维护一个插件链,当应用程序启动时,由插件加载模块 调用所述接口协议,将所述插件加载入插件链中;

根据应用程序的指令,由插件查询模块在所述插件链中查找已加载的插 件,并返回应用程序指定的插件的地址指针。

6、如权利要求5所述的方法,其特征在于,还进一步包括如下步骤:应用程序退出时,调用所述接口协议,由控件将已经加载的插件卸载, 并释放由所述加载插件所占用的内存。

7、如权利要求5所述的方法,其特征在于,所述插件的接口协议,包 括:连接协议,用以提供插件中的功能定义、事件定义以及通知控件加载, 包括:插件加载入口协议,用以说明插件的功能、加载事件定义,并通知 控件做联桥;

插件卸载入口协议,用以通知控件断开联桥,卸载事件定义;及插件退出入口协议,用以通知控件有插件开始退出并释放该插件所 占用的内存控件;及事件协议,用以提供用户与系统的交互操作,提供的事件包括:应用程 序事件、文档事件、视口事件、场景事件;所述视口事件是指用于处理窗口 消息的事件。

8、如权利要求5所述的方法,其特征在于,所述加载插件步骤,包括 如下步骤:根据所述插件的参数,获取与其相对应的插件CLSID号,其中所述参 数为该被加载插件的GUID字符串,或该插件的名称;

根据所述获取的CLSID号,创建该插件对象;

判断创建该插件对象是否成功,如果不成功则失败返回,如果创建成功, 则调用所述接口协议,将插件保存入插件链中,并保存该插件所对应的 CLSID号。

9、如权利要求5所述的方法,其特征在于,所述的查找并返回应用程 序指定的插件地址指针步骤,包括如下步骤:识别传入的插件参数的正确性,其中所述参数为指定插件的GUID字符 串,或该插件的名称;

根据参数获得相对应的插件的CLSID号;

根据该CLSID号,从插件链中查找具有相同CLSID号的插件;

然后判断是否查找成功,如果没有找到,则返回空,否则返回查找出来 的插件的地址指针。

说明书 :

技术领域

本发明涉及一种插件管理系统及方法,尤其涉及一种用于二次开发平台 的基于控件的插件管理系统及方法。

背景技术

随着计算机软件技术的发展,越来越多的软件用户能够使用一些简单的 编程工具(如脚本语言、VBA语言)来开发出适合自身要求的软件功能模 块。因此,现今的软件平台开发中,一般都要求在产品中能够提供让用户自 行定制功能模块的功能,以满足用户实际的需要,为用户提供方便、快捷、 简单的二次开发的功能与形式。
目前,大部分的软件产品所提供的二次开发平台都是以控件(ActiveX) 形式发布的,控件集成了平台功能,以接口方法、属性的形式提供给二次开 发用户。一般来说,控件开发能够支持Windows下各类可视化编程语言, 如Visual C++、Visual Basic、Borland Delphi。二次开发用户可以根据自身开 发水平选择其中一种开发语言,基于控件功能设计开发应用程序。在这种控 件模式下,控件提供接口都是基于IDispatch,二次开发中可以利用接口提供 的方法和属性来实现应用程序中某一功能。
控件技术在设计中有三个特点:
1、功能封装性:一个软件平台包含众多的SDK(Software Development Kit,软件开发工具包),控件技术就是将这些SDK封装起来,以简单地 接口方法、属性开放给二次开发用户,这种封装性在具体项目中极大方便了 项目应用程序地简单、快速完成。
2、事件响应性:控件技术包括了事件响应机制,它能够提供如数据加 载、系统退出、鼠标事件之类事件消息。控件事件响应性可以通知基于该控 件开发的应用程序某一过程或动作完成、取消、进行等状态,应用程序根据 这些事件响应采用一些必要的操作以完成相关动作。
3、功能有限性:功能有限性表明控件中集成的SDK是一个有限集合。
上述最后一个特点说明了控件功能是有限的,二次开发中只能利用这些 有限功能在项目应用中完成一些基于这些有限功能的业务。因此,针对二次 开发需求,目前的软件产品平台虽然几乎都提供了二次开发的接口和方法, 但控件只是功能的组合或封装,也就是说在二次开发中所有开发的功能只是 开发控件中功能的再次组合,而无法自定义模块功能。
例如,如图1所示,为现有控件功能对外提供时通过采用的模式示意图。 从图1可以看出,控件对平台功能进行了封装,二次开发出来的功能只是控 件中包含功能的组合,其本质不是一个用户自定义开发的功能,如果在具体 项目实施中,现场开发人员无法开发出控件中不具备的功能。
也就是说,如果现有控件只包含有功能1、功能2、功能3,那么在二 次开发中所开发出来的模块,其具有的所谓新功能1、2、3,只能是原有功 能的组合,而无法开发出真正意义上的新功能。
然而,事实上,在用户实际的二次开发中,往往要求根据自身的需要来 开发出控件中所不具有的功能模块,但现有软件平台的控件管理系统与方法 极大地限制了这种自定义开发模式。

发明内容

本发明所要解决的技术问题在于提供一种用于二次开发平台的基于控 件的插件管理系统及方法,解决了应用程序功能扩充的限制问题,在二次开 发中使用户可以加载并使用根据自身需要而自定义的原有控件不具有的新 功能模块,将原有控件的有限功能集合扩展为无限功能集合。
本发明提供一种用于二次开发平台的基于控件的插件管理系统,包括封 装有内部功能模块的控件,还包括:
至少一个具有用户自定义外部功能的插件;
接口协议模块,用以根据控件的标准接口,为所述插件提供通讯连接与 事件响应的接口协议;
插件管理器,用以将所述至少一个插件组织起来供外部程序调用,该插 件管理器包括:
插件加载模块,用于将所述插件加载到所述控件中;
插件链模块,用于依序保存加载入控件的插件;
插件查询模块,用于根据外部程序指令,查找保存入所述插件链模 块中的插件。
本发明进而提供一种用于二次开发平台的基于控件的插件管理方法,该 方法包括如下步骤:
根据控件的标准接口,提供一个与所述控件的通讯连接与事件响应相符 合的接口协议;
遵照所述接口协议,提供至少一个具有用户自定义外部功能的插件;
在所述控件中维护一个插件链,当应用程序启动时,由控件调用所述接 口协议,将所述插件加载入插件链中。
本发明还进一步包括如下步骤:
根据应用程序的指令,由控件在所述插件链中查找已加载的插件,并返 回应用程序指定的插件的地址指针;
根据应用程序的指令,由控件在所述插件链中查找已加载的插件,并返 回应用程序指定的插件的地址指针。
本发明为用户提供了方便、快捷、简单的二次开发形式,使用户能够使 用简单的语言就能够定制自身需要的功能和模块。通过本发明,用户开发出 来的系统功能能够脱离系统平台独立运行,且具有自身的界面风格,极大提 高了控件在应用项目中的实用性和灵活性。

附图说明

图1为现有控件功能对外提供时通过采用的模式示意图;
图2为本发明的用于二次开发平台的基于控件的插件管理系统的实施 例结构示意图;
图3为本发明所述的插件管理器204的内部结构实施例示意图;
图4为本发明所述的用于二次开发平台的基于控件的插件管理模式实 施例示意图;
图5为本发明所述的加载过程的实施例流程图;
图6为本发明所述的查找并返回应用程序指定的插件地址指针过程的 实施例流程图。

具体实施方式

如图2所示,为本发明的用于二次开发平台的基于控件的插件管理系统 的实施例结构示意图,包括封装有内部功能模块的控件201、一个用户自定 义功能插件202、一个接口协议模块203,以及一个插件管理器204。
其中,所述接口协议模块203,用以根据控件201的标准接口协议,为 所述插件202提供通讯连接与事件响应的接口协议;插件管理器204,用以 将所述至少一个插件202组织起来供外部程序调用。
如图3所示,为本发明所述的插件管理器204的内部结构实施例示意图, 包括:插件加载模块2041,用于将所述插件加载到所述控件中;插件链模 块2042,用于依序保存加载入控件的插件;插件查询模块2043,用于根据 外部程序指令,查找保存入所述插件链模块中的插件。
本领域技术人员应当知道,本发明所述的各个模块,例如插件管理器 204,既可以统一设计位于控件201之中,也可以独立存在。
通过所述接口协议模块203提供的接口协议,所述插件202的接口定义 符合所述控件201的标准接口定义。
所述接口协议模块203,包括连接协议单元与事件协议单元。其中,连 接协议单元,用以提供插件中的功能定义、事件定义以及通知控件加载,包 括:插件加载入口单元,用以说明插件的功能、加载事件定义,并通知控件 做联桥;插件卸载入口单元,用以通知控件断开联桥,卸载事件定义;及插 件退出入口单元,用以通知控件有插件开始退出并释放该插件所占用的内存 控件。事件协议单元,用以提供用户与系统的交互操作,提供的事件包括: 应用程序事件、文档事件、视口事件、场景事件等。
从图2、图3可以看出,二次开发用户开发的新功能插件202,通过本 发明的接口协议模块203加入到控件201中,以此来弥补控件功能有限性所 带来的不足,同时,控件201还保持了原有的模块功能,用户可以利用控件 提供的方法和属性,重新组合或直接使用控件中的功能模块,以达到功能的 最大化。
如图4所示,为本发明所述的用于二次开发平台的基于控件的插件管理 模式实施例示意图,首先,根据控件的标准接口,提供一个与所述控件的通 讯连接与事件响应相符合的接口协议(步骤401);遵照所述接口协议,提 供至少一个具有用户自定义外部功能的插件(步骤402);在插件链模块中 维护一个插件链,当应用程序启动时,由插件加载模块调用所述接口协议, 将所述插件加载入插件链中;(步骤403);根据应用程序的指令,由插件 查询模块在所述插件链中查找已加载的插件,并返回应用程序指定的插件的 地址指针(步骤404)。
此外,当应用程序退出时,本发明还可以调用所述接口协议,由控件将 已经加载的插件卸载,并释放由所述加载插件所占用的内存。
本发明所述的接口协议,可以是基于COM(Component Object Model, 组件对象模型)开发的,控件则是将平台中已有的功能模块封装起来以提供 出来做二次开发。所述控件可以利用ATL(Active Template Library,活动模 板库)技术实现COM,以及通过COM粘合插件到控件中,利用ATL技术 的控件可以遵守COM标准,在各种开发语言平台上开发使用。要实现插件 加载到控件中,这些插件需要遵守标准的所述控件标准接口方法和事件定 义,该协议主要包括连接协议与事件协议:
连接协议:连接协议是插件加载中的初始化协议,完成插件中功能定义、 事件定义以及通知控件加载。具体方法可以如下:
OnConnection,插件加载入口,通过该方法可以说明插件的功能、加载 事件定义,并通知控件做联桥。
OnDisconnection,插件卸载入口,通过该方法可以通知控件断开联桥, 卸载事件定义。
OnBeginShutdown,插件退出入口,通过该接口可以告知控件本插件开 始退出并释放本插件所占用的内存控件。
事件协议:事件是应用程序交换操作一个重要功能,由控件创建了事件 协议,通过该协议可以实现用户与系统交互操作,如:鼠标消息响应、键盘 消息响应。所述控件主要有以下几类事件:应用程序事件,应用程序事件由 应用程序对象引发。当用户启动,关闭应用程序,新建文档,视口时可引发 事件。文档事件,文档事件由文档对象引发。当文档关闭或打开时可引发事 件。视口事件,视口事件由视口对象引发。这类事件主要用于处理窗口消息。 场景事件,当场景发生改变时事件引发。此外,还可以支持其他对象事件。
本发明的插件接口协议是控件与应用程序插件之间的桥梁,在应用程序 开发中,可以利用一些简单的开发语言基于插件协议开发出具有新功能的插 件模块,然后将这些开发出来具有新功能的插件模块在应用系统启动时加载 到控件中,这样在系统运行时可以根据需要随时使用到这些插件中的功能。 协议内容包括了插件通知控件联桥、事件通知相应的内容。
本发明可以在控件内部维护一个插件链,在基于控件开发的应用程序启 动之时,可以将加载的插件模块保存在该插件链中。根据加载插件协议编写 完成插件功能可以通过控件的AddPlugin方法加载该插件,参数可以为插件 的GUID(全球唯一识别码)字符串,也可以是插件名称。
如图5所示,为本发明所述的加载方法实施例流程图,首先,根据所述 加载插件的参数名,获取与其相对应的插件CLSID号(步骤501);根据所 述获取的CLSID号,创建该插件对象(步骤502);然后判断创建插件对象 是否成功(步骤503),如果否,则失败返回(步骤505);如果创建成功, 则调用所述接口协议的插件加载入口协议,将加载的插件保存入插件链中, 并同时记录该插件所对应的CLSID号(步骤504)。
加载到控件中的插件在应用程序运行过程中要随时提供给应用程序使 用,使用时,由控件取得指定插件的属性,属性传入的参数可以为GUID字 符串或者插件名称,然后查找后返回给应用程序。如图6所示,为本发明所 述的查找并返回应用程序指定的插件方法实施例流程图,首先,要识别传入 的插件名称或ID字符串是否正确(步骤601);根据该参数获得相对应的 插件的CLSID号(步骤602);根据该CLSID号,从插件链中查找具有相 同CLSID号的插件(步骤603);然后判断是否查找成功(步骤604),如 果没有找到,则返回空(步骤606);否则,返回查找出来的插件的地址指 针(步骤605)。
本发明所述控件中的插件模块可以在Visual C++、Visual Basic、Borland Delphi语言平台上,二次开发用户可以根据实际需要选择一种熟悉、快捷、 简单语言来开发插件模块,开发起来比较容易。在实际的软件应用中,不同 用户有不同要求,利用本发明所述的基于控件的插件管理技术,可以以不变 应万变,即保留了控件应有的功能组合,又为用户在二次开发中提供了很好 的扩展平台。