动态库管理方法和装置的制作方法

文档序号:6429220阅读:95来源:国知局
专利名称:动态库管理方法和装置的制作方法
技术领域
本发明涉及计算机技术,尤其涉及一种动态库管理方法和装置。
背景技术
在计算机处理技术中,通常把一些共用函数制作成函数库,供其他程序使用。这些函数库一般分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。在现有的软件架构中,会先建立好底层中的所有动态库,外部(前端)直接调用底层中的动态库;当底层动态库进行增加或减少时,外部代码必须进行重新修改才能调用底层中的动态库。这不便于技术开发人员进行软件开发,大大降低了开发效率,没有很好的扩展性。虽然可以用插件技术解决部分问题,但是当前的插件技术只限制在很单一的一种类型的动态库上,比如基于一个编解码平台,每个插件的功能都受到了限制。即,不是编码与编码的动态库,相应的插件是不认的。同时,插件技术都是根据每个软件单独设计的,没有通用性,也没有一个规范。若采用com技术,系统也能统一管理各种com组件,但是这个管理是由操作系统来完成的,通过注册表来实现,对跨平台不是很好,其次它的管理是操作系统一级的,不同的软件之间的com组件会相互影响。

发明内容
本发明实施例所要解决的技术问题在于,提供一种动态库管理方法和装置。可对动态库实现统一管理,简化前端和后端的实现,使整个架构通用化,更易开发和扩展。为了解决上述技术问题,本发明实施例提供了一种动态库管理方法,包括 加载管理动态库的动态库;
初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中; 所述管理动态库的动态库接收前端发送的访问请求;
所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能,并根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。其中,所述将所述底层动态库支持的功能注册到所述管理动态库的动态库中可包括
调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。同时,所述方法还可进一步包括,预先生成所述管理动态库的动态库。
所述管理动态库的动态库管理的底层动态库为多个相同或不同类型的底层动态库。所述管理动态库的动态库包括前端调用函数表、统一入口函数和底层调用函数表,所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能包括
根据所述前端的访问请求调用所述前端调用函数表中的函数; 被调用的所述前端调用函数表中的函数跳转到所述统一入口函数; 所述统一入口函数再跳转到所述底层调用函数表中对应的函数。另一方面,本发明实施例还提供了一种动态库管理装置,该装置包括 加载模块,用于加载管理动态库的动态库;
初始化模块,用于初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中;
管理模块,用于运行初始化后的所述管理动态库的动态库,所述管理动态库的动态库接收前端发送的访问请求,并根据接收的所述访问请求查询注册的底层动态库支持的功能,再根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。其中,所述初始化模块还用于,调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。所述装置还可包括,生成模块,用于预先生成所述管理动态库的动态库。所述管理动态库的动态库管理的底层动态库为多个相同或不同类型的底层动态库。所述管理动态库的动态库包括前端调用函数表、统一入口函数和底层调用函数表,
所述管理模块运行的初始化后的所述管理动态库的动态库还用于,根据所述前端的访问请求调用所述前端调用函数表中的函数,被调用的所述前端调用函数表中的函数跳转到所述统一入口函数,所述统一入口函数再跳转到所述底层调用函数表中对应的函数。在本发明实施例中通过实现一个管理动态库的动态库,将底层的动态库都注册到其中,由其来统一管理所有的底层动态库,前端通过该管理动态库的动态库来访问底层动态库的所有功能,这样当底层动态库发生改变时,只要修改在管理动态库的动态库中的注册信息,就可以实现前端的访问,提高了整个架构的通用性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例中的动态库管理方法的一个具体流程示意图; 图2是本发明实施例中的动态库管理装置的一个具体组成示意图;图3是本发明实施例中的动态库管理方法的另一个具体流程示意图; 图4是本发明实施例中的管理动态库的动态库中的表结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在本发明实施例中,通过一个管理动态库的动态库实现前端对底层动态库的调用,由于底层动态库只需要在管理动态库的动态库中进行功能的注册,前端通过注册的函数就可以实现相应的功能调用,使得前端可以通过管理动态库的动态库提供的统一接口即可,当底层动态库发生改变时,前端并不需要进行代码开发,极大的提高了系统在开发的效率。如图1所示,为本发明实施例中的动态库管理方法的一个具体流程示意图。该流程包括如下步骤。101、加载管理动态库的动态库。当然,在本步骤之前还可包括预先生成所述管理动态库的动态库的步骤。由于在系统运行时,可能出现多次加载管理动态库的动态库的情况,因而并不一定在每次加载动作之前都有一生成动作。102、初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中。比如,通过调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。其中,所述管理动态库的动态库管理的底层动态库可为多个相同或不同类型的底层动态库。如这些底层动态库可以都是Photoshop的底层动态库,也可以是video converter的底层动态库,也可以是photoshop和video converter的底层动态库的组合,寸寸。103、所述管理动态库的动态库接收前端发送的访问请求。104、所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能,并根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。在管理动态库的动态库中可包括前端调用函数表、统一入口函数和底层调用函数表,那么所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能可包括根据所述前端的访问请求调用所述前端调用函数表中的函数;被调用的所述前端调用函数表中的函数跳转到所述统一入口函数;所述统一入口函数再跳转到所述底层调用函数表中对应的函数。相应于上述的方法流程,本发明实施例还提供了一种动态库管理装置,如图2所示,该装置包括加载模块20,用于加载管理动态库的动态库;初始化模块22,用于初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中;管理模块24,用
6于运行初始化后的所述管理动态库的动态库,所述管理动态库的动态库接收前端发送的访问请求,并根据接收的所述访问请求查询注册的底层动态库支持的功能,再根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。其中,所述装置还可包括,生成模块26 (图中标识为虚线),用于预先生成所述管理动态库的动态库。所述初始化模块22还用于,调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。所述管理动态库的动态库管理的底层动态库为多个相同或不同类型的底层动态库。所述管理动态库的动态库包括前端调用函数表、统一入口函数和底层调用函数表,所述管理模块M运行的初始化后的所述管理动态库的动态库还用于,根据所述前端的访问请求调用所述前端调用函数表中的函数,被调用的所述前端调用函数表中的函数跳转到所述统一入口函数,所述统一入口函数再跳转到所述底层调用函数表中对应的函数。如图3所示,为本发明实施例中的动态库管理方法的另一个具体流程示意图。该流程包括如下步骤。步骤301 预先生成管理动态库的动态库。步骤302 外部(界面或业务层)加载该管理动态库的动态库。步骤303 外部调用管理动态库的动态库的初始化函数。步骤304 管理动态库的动态库进行初始化,加载所有的被管理的底层动态库,并调用它们的注册函数,让被管理的底层动态库把它支持的功能注册到该管理动态库的动态库中,由管理动态库的动态库统一管理。步骤305 外部(界面或业务层)请求询问该管理动态库的动态库。步骤306 该管理动态库的动态库根据接收的请求询问向外部返回结果信息。具体地,当管理动态库的动态库根据接收的请求查询自己的功能注册表,若存在支持的功能对象,则向外部返回该功能对象;若不存在支持的功能对象,则向外部返回空的信息等以指示不支持。从上所述的实施例可以理解,从控制权的角度来说,界面(即前端、或称外部)提供了一个外部程序,用户双击它的时候,系统把控制权交给了这个程序,这个程序得到了控制权,然后它得以执行;该程序执行时,先加载管理动态库的动态库,然后通过调用管理动态库的动态库的初始化函数(即对管理动态库的动态库进行初始化),把控制权交给管理动态库的动态库;管理动态库的动态库得到控制权限后,加载所有被管理的动态库,并对这些动态库的功能进行注册(如,将这些功能放到自己的功能注册表中),之后管理动态库的动态库就有了所有的功能的一个列表;然后管理动态库的动态库从初始化函数返回(即初始化结束),把权限交回给外部。外部要询问管理动态库的动态库的一个功能的时候,外部调用管理动态库的动态库的request函数,再次把控制权交给管理动态库的动态库,管理动态库的动态库把结果返回,控制权再次回到外部。综上所述可见,本发明实施例的核心是实现一个管理动态库的动态库,功能上, 它的功能相当于windows的注册表,底层的动态库都应该注册到它上面来,由它来统一管理底层的所有动态库;而外部的业务逻辑层只应该通过它来访问到底层的所有功能,就像 windows的程序通过注册表来访问到系统上的组件。
同时,管理动态库的动态库除了可以支持注册组件,还支持注册功能函数,就是把一些通用的函数的地址注册进来,然后用一个动态的地址表保存着,一个函数也对应一个 IID,外部通过此核心的管理动态库中转来访问到真实的函数地址;如果一个功能有多个组件实现了,像direct show那样选择一个组件(自动连接,也可手动连接)。在本发明的一些具体实施例中,该管理动态库的动态库要实现的函数可包括 Init 遍历当前目录下的所有dll,并调用它们的注册函数;
Regedit:加载指定动态库,并调用它的注册函数; Unregedit:卸载指定动态库; Uninit:反初始化;
Request:查询函数,查询到底层是否实现了指定功能; Get_info:返回所有的注册信息,调试分析用。相应的,被管理的动态库要实现的函数包括
Regedit 把自己支持的功能与对应的接口注册到管理的动态库里,让上层可以访问到自己支持的功能,也要把自己对一个功能支持的完美程序注册进去,为上层调用时提供一个选择性,如果另一个组件也实现了我们的功能,它的实现比我们完美,那么应该调用它而不是自己;
Unregedit:上层要卸载自己的时候,会调用这个函数,做一些相应的处理; Request:功能请求函数,用来让上层询问是否支持一个指定功能。因此,本发明实施例所提供的方法和装置,可以动态地增加和减少管理的动态库, 而上层无需进行重新修改即能调用底层中的动态库。并且,与现有技术中的插件不同,本发明实施例所提供的方法和装置并不只限制在管理很单一的一种类型的动态库上。同时,为了实现安全性,管理动态库的动态库可实现两张函数指针表,一个是存放将底层动态库的功能注册进来的函数指针,叫表A,一个则由管理动态库的动态库生成,叫表B,都存放指针。A表与B表中的指针是一一对应的关系,上层调用B表中的函数,B表中的函数跳转到统一入口函数,第一入口函数再跳转到A表中对应的函数,A表中的函数指针是指向插件中对应的函数的。上层调用的所有功能都会经过统一入口函数,如图4所示。可以在统一入口函数进行安全验证,与过滤功能等等。这整个过程就像操作系统的系统调用一样,B表对应的是操作系统的API表,统一入口函数相当于操作系统的系统调用入口(或叫中断入口,在P3之后的CPU叫快速系统调用入口),A表相当于操作系统内核中的API表。另外,通过本发明实施例提供的技术方案,当两个软件都是按照这样的方法去管理时,比如一个是photoshop,别一个是video Converter,那么这两个底层(底层的所有动态库)可以合并,相当于把所有的功能插件放一起就行了,这个新的底层将同时提供 photoshop与video Converter的功能。就像emacs这个软件一样,可以用它来打游戏,可以用它来写代码,可以用它来听音乐,也可以用它来收发邮件。这是一种二进制级的复合的关系,也是一种组合的关系。这样一个架构的设计方法,由于动态库是二进制级的,因此是二进制级的组合,二进制级的重用。综上可知,在本发明实施例中通过实现一个管理动态库的动态库,将底层的动态库都注册到其中,由其来统一管理所有的底层动态库,前端通过该管理动态库的动态库来访问底层动态库的所有功能,这样当底层动态库发生改变时,只要修改在管理动态库的动态库中的注册信息,就可以实现前端的访问,提高了整个架构的通用性。本领域普通技术人员可以理解实现上述实施例方法中的全部或部 分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
权利要求
1.一种动态库管理方法,其特征在于,所述方法包括加载管理动态库的动态库;初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中;所述管理动态库的动态库接收前端发送的访问请求;所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能,并根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。
2.如权利要求1所述的动态库管理方法,其特征在于,所述将所述底层动态库支持的功能注册到所述管理动态库的动态库中包括调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。
3.如权利要求1所述的动态库管理方法,其特征在于,所述方法还包括,预先生成所述管理动态库的动态库。
4.如权利要求1至3中任一项所述的动态库管理方法,其特征在于,所述管理动态库的动态库管理的底层动态库为多个相同或不同类型的底层动态库。
5.如权利要求4所述的动态库管理方法,其特征在于,所述管理动态库的动态库包括前端调用函数表、统一入口函数和底层调用函数表,所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能包括根据所述前端的访问请求调用所述前端调用函数表中的函数;被调用的所述前端调用函数表中的函数跳转到所述统一入口函数;所述统一入口函数再跳转到所述底层调用函数表中对应的函数。
6.一种动态库管理装置,其特征在于,所述装置包括加载模块,用于加载管理动态库的动态库;初始化模块,用于初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中;管理模块,用于运行初始化后的所述管理动态库的动态库,所述管理动态库的动态库接收前端发送的访问请求,并根据接收的所述访问请求查询注册的底层动态库支持的功能,再根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。
7.如权利要求6所述的动态库管理装置,其特征在于,所述初始化模块还用于,调用所述底层动态库的注册函数,将所述底层动态库支持的功能注册到所述管理动态库的动态库中。
8.如权利要求6所述的动态库管理装置,其特征在于,所述装置还包括,生成模块,用于预先生成所述管理动态库的动态库。
9.如权利要求6至8中任一项所述的动态库管理装置,其特征在于,所述管理动态库的动态库管理的底层动态库为多个相同或不同类型的底层动态库。
10.如权利要求9所述的动态库管理装置,其特征在于,所述管理动态库的动态库包括前端调用函数表、统一入口函数和底层调用函数表,所述管理模块运行的初始化后的所述管理动态库的动态库还用于,根据所述前端的访问请求调用所述前端调用函数表中的函数,被调用的所述前端调用函数表中的函数跳转到所述统一入口函数,所述统一入口函数再跳转到所述底层调用函数表中对应的函数。
全文摘要
本发明实施例公开了一种动态库管理方法和装置,该方法包括加载管理动态库的动态库;初始化所述管理动态库的动态库,所述初始化包括所述管理动态库的动态库加载管理的底层动态库,并将所述底层动态库支持的功能注册到所述管理动态库的动态库中;所述管理动态库的动态库接收前端发送的访问请求;所述管理动态库的动态库根据接收的所述访问请求查询注册的底层动态库支持的功能,并根据查询结果向所述前端返回所述前端请求的底层动态库支持的功能对象或返回结果为不支持。采用本发明,可对动态库实现统一管理,简化前端和后端的实现,使整个架构通用化,更易开发和扩展。
文档编号G06F9/44GK102331931SQ20111020876
公开日2012年1月25日 申请日期2011年7月25日 优先权日2011年7月25日
发明者姚育平 申请人:深圳市万兴软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1