一种应用编程接口控制方法和控制功能模块的制作方法

文档序号:6649362阅读:198来源:国知局
专利名称:一种应用编程接口控制方法和控制功能模块的制作方法
技术领域
本发明涉及Windows应用技术,特别涉及一种应用编程接口控制方法和应用该方法的控制功能模块。
背景技术
在Windows程序中,各个进程之间交换数据,进行数据通讯,称为进程间通讯。IDispatch(Dispatch接口)是Windows的应用程序提供其属性和方法给外部程序使用其功能的一种方式,这种接口机制中一个最重要的函数是IDispatch∷Invoke,通过该函数及其调用参数DISPID(一个数字号码),可以访问到应用程序的不同属性和方法,从而实现进程间通讯。
API(Application Programming Interface,应用编程接口)是一个程序提供给外部程序访问其属性和方法的一种方式,通过访问这套接口,可以实现多个程序之间的进程间通讯,从而达到交换数据的目的。
应用编程接口的设计方式可以有多种,最常见的windows应用编程接口是进程外COM(Component Obiect Model,组件对象模型)接口,进程外COM接口是应用程序提供给外部应用程序使用的COM接口,外部程序使用这些接口必须遵循windows COM管理规范。Dispatch接口是其中一种进程外COM接口。本文中提到的应用编程接口都是特指这种进程外COM接口。
单实例指应用程序只能同时运行一例,必须在退出当前运行才能启动另一次运行。多实例指应用程序可以同时启动运行多次,每个实例对应一个独立的进程,如WORD、IE都是多实例的程序。大多数软件都只能在操作系统中运行一份实例,这种单实例的程序可以实现一套普通的进程外COM接口,并通过windows的COM系统保证进程间通讯的正常进行。
Windows COM系统将每一个COM接口都一一映射到一个IID,外部程序可以通过指定IID来查询对应的COM接口。因此,多实例的程序不能简单的将其多个实例的应用编程接口映射到一个固定的IID,外部程序也不能通过指定一个IID访问到多个实例的应用编程接口。
多实例的应用程序,如果每个实例都需要对外提供应用编程接口,那么,每个接口需要使用不同的IID。这里存在两个问题1、应用程序支持将其接口动态绑定到不同的IID,并注册到COM系统中;2、外部程序需要查询到应用程序每个实例接口使用的IID。
如图1所示,为了解决上述中问题1,应用程序在启动运行时需要先到注册表或配置文件中从安装过程中登记好的一系列IID中查询出一个未使用的IID,并使用其创建应用编程接口;或者,临时产生出来一个新的GUID(GloballyUnique Identifier)作为接口IID,来创建应用编程接口并记录下来,以便让外部程序可以查询。GUID为全球唯一标识符,由16个字节长度的字母数字串组成,表示形式通常是用横线连接起来的32个字母数字串,如7111BD1A-7F0B-4CEE-B411-260DADFEFA2A;IID(Interface Identifier)接口标识符,使用GUID来表示的接口标识符。另外,为了维护IID的使用情况,在实例运行结束时,需要在注册表或配置文件中注销对应IID的使用记录。
如图2所示,外部程序访问应用程序的编程接口时,需要先访问注册表或者配置文件,获取接口IID,再按照正常的COM使用方法调用接口。
使用以上方案,有下述缺点每个实例启动时都需要查询注册表或者配置文件,建完COM接口之后,需要将自身使用的IID记录到注册表或者配置文件,并且在运行结束时,需要注销自身IID的使用记录,系统数据的同步处理较为复杂;同样外部应用程序访问应用编程接口时,需要访问注册表或者配置文件查询编程接口的IID;而且如果应用程序的实例意外终止时,自身IID的使用记录不会被注销,导致外部程序访问时出错。
对于允许运行多份实例的程序需要对外部程序提供每个实例对应的应用编程接口,Windows并没有提供相应的机制或方法,因此,使用传统的方法和思路实现这个功能会非常复杂、繁琐,而且外部程序要实现进程间通讯的难度也很大。

发明内容
本发明提供一种应用编程接口控制方法和控制功能模块,以解决现有控制方法复杂、繁琐,而且外部程序要实现进程间通讯的难度较大的问题。
一种应用编程接口控制方法,包括如下步骤S1、捕获应用实例启动运行时的API接口登记请求,所述API接口用于外部程序访问该应用实例;并S2、为该应用实例产生对应的接口标识符(IID)或获取该应用实例已有的IID并创建API接口,将该API接口对应该IID登记保存。
所述方法还包括如下步骤S3、捕获应用实例结束运行时的API接口注销请求,并删除对应的API接口。
所述方法还包括所述API接口和对应的IID登记保存在API接口维护列表中,该API接口维护列表中还对应保存有应用实例的绑定信息。
所述方法还包括捕获外部程序查询应用实例API接口的请求,该请求中包含应用实例的绑定信息;并根据所述应用实例的绑定信息从所述API接口维护列表中查询对应的应用实例API接口发送给外部程序。
所述方法还包括当查询到对应的应用实例API接口后,验证该API接口对应的进程是否存在和/或正在运行,如果全部为是则将所述API接口发送给外部程序,否则,向外部程序返回错误指示。
一种应用实例API接口控制功能模块,包括API接口信息存储单元,用于存储登记应用实例的API接口;信息捕获单元,用于捕获应用实例的API接口登记/注销请求、以及外部程序查询应用实例API接口的请求;控制单元,处理所述信息捕获单元接受的请求并维护所述API接口信息存储单元中存储的信息;信息发送单元,用于向外部程序发送所查询的API接口或错误提示信息。
所述控制单元包括API接口登记处理子单元,用于处理应用实例的API接口登记请求并将创建的API接口存入所述API接口信息存储单元;API接口注销处理子单元,用于处理应用实例的API接口注销请求,并所述API接口信息存储单元删除注销的API接口;API接口查询子单元,用于处理外部程序查询应用实例API接口请求,并所述API接口信息存储单元中查询对应的API接口后通过信息发送单元发送给尾部程序。
API接口状态检测子单元,用于检测API接口对应的进程是否存在和/或正在运行,如果全部为是则指示所述API接口查询子单元将所述API接口发送给外部程序,否则,指示所述API接口查询子单元向外部程序返回错误指示。
本发明的有益效果如下本发明引入API接口管理程序通过建立API接口列表维护应用实例的API接口,应用程序实例在启动时先访问管理程序的外部接口,在管理程序获取可以绑定的IID,并且进行登记工作。在实例退出时,访问管理程序进行注销工作,整个过程不再需要跟注册表或者配置文件同步数据,减少了系统同步处理的复杂度;外部程序只需要按照标准COM方式访问API接口管理程序即可得到运行实例的API接口,相比现有技术,只需要一个工作步骤就可以完成,实现更加简单;同时,在运行实例出错时,API接口管理程序的维护工作,可以启动运行实例或者返回错误信息给外部程序,从而提高了系统的可靠性,也降低了外部程序访问的实现代价。


图1为现有技术中,应用程序通过访问注册表或配置文件创建及注销实例COM接口的流程;图2为现有技术中,外部程序访问应用程序编程接口的流程图;图3为本发明所述利用API接口管理程序控制API接口的方法示意图;图4为本发明所述应用程序通过访问API接口管理程序创建及注销实例COM接口的流程;图5为本发明所述外部程序访问应用程序编程接口的流程图;图6为本发明所述API接口管理程序维护接口对应表的示意图;图7为本发明所述API接口控制功能模块的结构示意图。
具体实施例方式
现有实现方式中,外部程序只能通过自己查找系统注册表或者软件配置文件得到多实例程序的编程接口IID,这样就增大了编程的复杂性,同时也存在IID等记录信息的同步问题,如果运行实例意外终止,势必造成信息的不同步,会造成外部程序访问接口失败,也得不到任何帮助信息。
本发明针对上述问题,引入API接口管理程序通过建立API接口列表维护应用实例的API接口,外部程序只需要按照标准COM方式访问API接口管理程序即可得到运行实例的API接口,相比现有技术,只需要一个工作步骤就可以完成,实现更加简单。同时,在运行实例出错时,API接口管理程序会做维护的工作,启动运行实例或者返回错误信息给外部程序,从而提高了系统的可靠性,也降低了外部程序访问的实现代价。
如图3所示,本发明通过引入一个编程接口管理程序来解决传统方法中的问题。API管理程序内部通过维护一张内部的接口管理对应表,来管理每个应用实例的API接口及其对应关系,并且在每次接受访问时对于应用实例接口的有效性进行检查,以保证外部程序不会访问出错,表1所示为接口管理对应表的一个实例。
表1.接口对应表

其中,通过对应表中的应用程序实例绑定信息来区分每一个应用程序,类似于编码信息,可以是一个数字串号码,如手机号码、QQ号码,也可以是一个字符串如人名、email等等。实例绑定信息具有唯一性,实例通过该绑定信息登记到接口对应表中,外部程序访问时,携带要访问的实例的绑定信息。
API接口管理程序包含处理了所有跟API接口相关的工作,在整个操作系统中,只有一份实例属于标准的进程外COM接口程序,可以使用正常的COM访问控制方法进行交互通讯,API接口管理程序完成以下功能1、使用windows COM系统函数创建应用编程接口的IID,系统函数本身保证创建出来的IID唯一,不产生冲突;2、创建运行实例的应用编程接口;3、控制运行实例的应用编程接口的生命周期,既可以启动实例编程接口的运行,也可以终止其运行;4、管理维护接口对应表;5、对外提供运行实例的接口IID或者接口指针;6、维护运行实例的应用编程接口的错误处理流程;COM访问控制方法的流程是指windows默认的COM访问控制方法,由系统COM库自动查找注册表和内核系统的相关信息而进行进程外通讯,接口调用方式表现形式与内部接口或者内部函数相似。
如图4所示,应用程序实例在启动时先访问管理程序的外部接口,在管理程序获取可以绑定的IID,并且进行登记工作。在实例退出时,访问管理程序进行注销工作。整个过程不再需要跟注册表或者配置文件同步数据。
如图5所示,外部程序通过访问管理程序,取得对应的API接口对应用程序实例进行访问。整个过程不再需要跟注册表或者配置文件同步数据。
外部程序查询接口时,需要提供一些实例的绑定信息,管理程序通过在接口对应表的接口绑定信息中查找这些信息,来确定外部程序要访问的接口,如果没有对应的接口,也可能启动运行一个实例并创建其对应的编程接口,同时完成绑定信息和接口的对应关系,这个创建过程的策略可以由外部程序调用时指定是否需要。
如图6所示,API管理程序内部通过维护一张内部的接口对应表,来管理每个应用实例的API接口及其对应关系,并且在每次接受访问时对于应用实例接口的有效性进行检查,以保证外部程序不会访问出错。
有效性检查是指管理程序查找到了对应接口以后,检查该接口是否可用,具体可以通过检查该接口所在的进程是否存在或者处于活动状态来进行检查确认。
通常检查进程是否存在或者处于活动状态的方法是通过枚举系统的进程列表,并在列表中查询是否存在要检查的进程信息。也可以通过管理程序和编程接口所在的进程相互发送窗口消息来检查进程的活动情况。还可以在进程的应用编程接口中提供一个独立的查询函数,管理程序可以通过调用该函数并得到反馈信息,来检查进程运行情况是否正常,或者,由编程接口所在的进程不断回调管理程序提供的心跳回调事件接口,来维护进程运行情况的查询。还有一些方法是通过使用共享内存、管道或者文件等方式,来维护一些同步信息,从而达到检查的目的。其中,上述方法中的第一种方法枚举进程列表,比较简单有效。
如图7所示,为实现本发明所述方法,本发明还提供一种应用与Windows系统中的应用实例API接口控制功能模块,包括
API接口信息存储单元,用于存储登记应用实例的API接口;信息捕获单元,用于捕获应用实例的API接口登记/注销请求、以及外部程序查询应用实例API接口的请求;控制单元,处理所述信息捕获单元接受的请求并维护所述API接口信息存储单元中存储的信息;信息发送单元,用于向外部程序发送所查询的API接口或错误提示信息。
其中控制单元可以包括以下子单元,分别用于执行不同的功能API接口登记处理子单元,用于处理应用实例的API接口登记请求并将创建的API接口存入所述API接口信息存储单元;API接口注销处理子单元,用于处理应用实例的API接口注销请求,并所述API接口信息存储单元删除注销的API接口;API接口查询子单元,用于处理外部程序查询应用实例API接口请求,并所述API接口信息存储单元中查询对应的API接口后通过信息发送单元发送给尾部程序。
为实现对应用实例的检测,控制单元还包括API接口状态检测子单元,API接口对应的进程是否存在和/或正在运行,如果全部为是则指示所述API接口查询子单元将所述API接口发送给外部程序,否则,指示所述API接口查询子单元向外部程序返回错误指示。
本发明技术方案,通过引入API管理程序,单独维护了接口对应关系,大大节省了应用实例开发成本及其运行时的计算复杂性,同时也使得外部程序访问每个实例API变得更加方便简单,只需要处理接口相关的工作,不需要涉及到访问注册表、配置文件等操作,而且通过管理程序检查实例接口的有效性,可以避免运行实例意外终止所带来的访问错误。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种应用编程接口控制方法,其特征在于,包括如下步骤S1、捕获应用实例启动运行时的应用编程接口(API)登记请求,所述API接口用于外部程序访问该应用实例;S2、为该应用实例产生对应的接口标识符(IID)或获取该应用实例已有的IID并创建API接口,将该API接口对应该IID登记保存。
2.如权利要求1所述的方法,其特征在于,所述方法还包括如下步骤S3、捕获应用实例结束运行时的API接口注销请求,并删除对应的API接口。
3.如权利要求2所述的方法,其特征在于,所述方法还包括所述API接口和对应的IID登记保存在API接口维护列表中,该API接口维护列表中还对应保存有应用实例的绑定信息。
4.如权利要求3所述的方法,其特征在于,所述方法还包括捕获外部程序查询应用实例API接口的请求,该请求中包含应用实例的绑定信息;并根据所述应用实例的绑定信息从所述API接口维护列表中查询对应的应用实例API接口发送给外部程序。
5.如权利要求4所述的方法,其特征在于,所述方法还包括当查询到对应的应用实例API接口后,验证该API接口对应的进程是否存在和/或正在运行,如果全部为是则将所述API接口发送给外部程序,否则,向外部程序返回错误指示。
6.一种应用实例API接口控制功能模块,其特征在于,包括API接口信息存储单元,用于存储登记应用实例的API接口;信息捕获单元,用于捕获应用实例的API接口登记/注销请求、以及外部程序查询应用实例API接口的请求;控制单元,处理所述信息捕获单元接受的请求并维护所述API接口信息存储单元中存储的信息;信息发送单元,用于向外部程序发送所查询的API接口或错误提示信息。
7.如权利要求6所述的控制模块,其特征在于,所述控制单元包括API接口登记处理子单元,用于处理应用实例的API接口登记请求并将创建的API接口存入所述API接口信息存储单元;API接口注销处理子单元,用于处理应用实例的API接口注销请求,并所述API接口信息存储单元删除注销的API接口;API接口查询子单元,用于处理外部程序查询应用实例API接口请求,并所述API接口信息存储单元中查询对应的API接口后通过信息发送单元发送给尾部程序。
8.如权利要求7所述的控制模块,其特征在于,所述控制单元还包括API接口状态检测子单元,用于检测API接口对应的进程是否存在和/或正在运行,如果全部为是则指示所述API接口查询子单元将所述API接口发送给外部程序,否则,指示所述API接口查询子单元向外部程序返回错误指示。
全文摘要
本发明涉及Windows应用技术,特别涉及一种应用编程接口控制方法和应用该方法进行控制的功能模块,引入API接口管理程序通过建立API接口列表维护应用实例的API接口,外部程序只需要按照标准COM方式访问API接口管理程序即可得到运行实例的API接口,相比现有技术,只需要一个工作步骤就可以完成,实现更加简单。同时,在运行实例出错时,API接口管理程序会做维护的工作,启动运行实例或者返回错误信息给外部程序,从而提高了系统的可靠性,也降低了外部程序访问的实现代价。
文档编号G06F9/44GK1940865SQ20051010812
公开日2007年4月4日 申请日期2005年9月29日 优先权日2005年9月29日
发明者林友尧, 陈启祥 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1