在无线二进制运行环境平台实现动态链接库方法

文档序号:6641699阅读:114来源:国知局

专利名称::在无线二进制运行环境平台实现动态链接库方法
技术领域
:本发明涉及计算机及通信
技术领域
,尤其涉及在无线二进制环境(Brew)平台实现动态链接库的方法。
背景技术
:Brew是由美国高通公司针对其CDMA手机芯片提供的一个无线应用程序运行环境,Brew不是一个操作系统,而是一个用于访问手机软件和硬件资源的API集合。Brew平台为应用程序提供了一系列的应用程序接口(API),通过Brew应用程序过这些API,可以访问、使用手机的硬件和软件资源。Brew应用程序运行与支持Brew接口的CDMA手机上,一般是以独立的小应用程序的形式存在,没有类似PC上的动态链接库的概念和实现方法。这样就决定了在Brew平台上开发的应用程序一般规模较小、扩展性和模块化较差,无法实现程序的动态升级。Brew提供了扩展类(ExtensionClass)方式实现函数输出的功能。该方法实现时与编写正常的Brew应用程序相同,其它的Brew程序可以直接调用扩展类输出的函数。支持Brew的手机可以通过CDMA1X网络无线下载并运行Brew程序。目前,Brew应用发展十分迅速,用户可以实现下载游戏、应用软件、GPS定位、无线购物等几十种数据服务。由于受限于Brew的开发模式,Brew应用程序大部分应用是单一功能的小软件,没有比较复杂的应用出现;虽然Brew扩展类提供了函数输出的功能,但是它功能单一,只能提供简单的函数输出,无法实现复杂的模块功能和交互,而且也无法实现动态的模块升级更新。
发明内容本发明提供一种在无线二进制环境(Brew)平台实现动态链接库的方法,以解决现有Brew平台中存在应用程序功能单一、扩展性和模块化较差的问题。本发明进一步解决现有Brew平台中无法实现应用程序动态升级的问题。本发明提供以下技术方案一种在无线二进制运行环境(Brew)平台实现动态链接库的方法,包括如下步骤A、生成可执行的AIF(ArmImageFormat)结构的动态链接库文件,其中所述动态链接库文件中包含有用于初始化动态链接库的初始化代码;B、Brew平台的调用程序加载所述动态链接库文件,并在该加载过程中通过执行所述初始化代码得到该动态链接库的句柄;C、调用程序通过动态链接库的句柄调用加载的动态链接库。根据上述方法所述初始化代码位于所述动态链接库文件的可执行代码段。步骤B具体包括如下步骤B1、分配内存空间,并将动态链接库读入该内存空间;B2、初始化所述内存空间,使该内存空间分为只读数据段和执行代码段;B3、执行初始化代码初始化动态链接库和向调用程序返回动态链接库的句柄。步骤B3具体包括如下步骤B31、创建动态链接库的句柄实例;B32、初始化相关的变量和运行动态链接库所需的数据结构;B33、初始化动态链接库的句柄并返回给调用程序。所述动态链接库的句柄包括消息处理函数、反初始化函数及与功能相关的数据结构。该方法还包括所述调用程序卸载所述动态链接库。卸载动态链接库包括如下步骤停止动态链接库中正在执行的功能代码;执行反初始化函数释放动态链接库使用的相关资源;释放为动态链接库分配的内在空间。在步骤B之前还包括步骤B1、Brew平台中的应用程序通过网络与服务器建立连接并从服务器下载所述动态链接库文件。步骤B1中还利用下载的动态链接库文件替换需要更新的动态链接库文件。本发明有益效果如下1、采用本发明,Brew平台上的动态链接库输出的函数或者应用程序地址可以被其他的程序调用,因此,Brew平台上的应用程序可以通过调用不同功能的动态链接库实现复杂功能,同时也能够增强程序的扩展性。2、根据需要还可以通过下载动态链接库替换原来的动态链接库实现Brew程序的在线升级。3、利用本发明可改变目前Brew的单人小规模的开发方式,便于程序的模块化开发和管理。图1为现有技术中Brew执行文件的结构示意图;图2为本发明的动态链接库的文件结构示意图;图3为本发明中加载动态链接库的流程图;图4为本发明中初始化完成后动态链接库的内存分布示意图;图5为本发明中动态链接库中的执行初始化代码的流程图;图6为本发明中直接函数调用和消息驱动使用动态链接库的示意图;图7为本发明中消息驱动方式的示意图;图8为本发明中Brew调用程序加载多个动态链接库的示意图;图9为本发明中卸载动态链接库的流程图;图10A为本发明中通过网络对Brew应用程序进行升级的流程图;图10B为本发明中Brew应用程序与服务器通信的示意图;图10C为本发明中Brew应用程序加载新的动态链接库的示意图。具体实施例方式无线二进制运行环境(Brew)手机一般采用ARM7或ARM9作为处理器,在该处理器上运行的应用程序二进制执行文件(MOD文件)为可执行的AIF(ExecutableAIF(ArmImageFormat))结构,ExecutableAIF文件的第一个字节就是执行代码。根据编译器的不同,编译生成的MOD文件结构略有不同,但均包含初始化代码、执行代码、只读数据区三个基本部分。Brew执行文件的结构如图1所示,其中Header段是程序的入口代码,用于初始化应用程序MOD的地址偏移,完成必要的初始化后,转跳至Text段;Text段是应用程序的执行代码;Rodata段是应用程序的只读数据段,用于存放字符串等常量。Brew将MOD文件加载到内存固定位置,直接从Header开始应用程序的执行。本发明利用ExecutableAIF(ArmImageFormat)结构的特点,在Header段和Text段之间增加初始化(Init)代码段来实现动态链接库(DLL),如图2所示。Init代码段位于动态链接库本身的二进制执行代码中,通过与外部的加载程序配合对动态链接库作初始化和生成使用动态链接库的句柄。具有Init代码段的AIF(ArmImageFormat)结构的源程序经过正常的Brew编译流程后,便生成ExecutableAIF结构的动态链接库,该动态链接库还不能直接被调用程序使用,必须通过Brew平台上的应用程序加载后才可被正常使用。动态链接库向调用程序提供两个接口函数,分别用于加载和卸载动态链接库。参阅图3所示,Brew平台上的调用程序加载动态链接库的过程如下步骤100、调用程序为待加载的动态链接库分配内存区。步骤110、将动态链接库文件读入分配的内存区。动态链接库的内存装入地址就是该DLL运行的基地址。步骤120、初始化动态链接库的内存空间。初始化后的动态链接库的内存空间分为只读数据段和执行代码段两部分,其中,只读数据段用于保存由外部为该动态链接库指定的信息,比如操作路径等,在执行代码段的程序只可读取该数据段中的数据,而不能修改。初始化完成后动态链接库的内存分布如图4所示。步骤130、执行Header代码和执行动态链接库中的Init代码,完成动态链接库的初始化和生成动态链接库的句柄。在Header代码完成后自动调用Init代码。由于动态链接库二进制代码文件为ExecutableAIF结构,所以入口代码即为可执行代码,因此,完成内存空间初始化后,应用程序直接转跳至动态链接库入口开始执行Header代码,在Header代码完成后自动调用Init代码。步骤140、向调用程序返回动态链接库的句柄,该句柄用于调用程序调用(访问)动态链接库。参阅图5所示,动态链接库中的Init代码执行的流程如下步骤200、创建动态链接库的句柄实例。步骤210、初始化有关的变量和运行动态链接库所需的数据结构。步骤220、初始化句柄。由于DLL句柄的数据结构是由用户根据DLL的具体功能而定义,所以句柄初始化就是完成句柄数据结构的赋值,比如输出函数指针、输出对象指针等。步骤230、返回动态链接库句柄。在上述步骤210中,初始化动态链接库所需的数据结构包括(1)初始化IShell指针;该指针是Brew的标准指针,用于访问IShell接口函数和访问BREW的全局系统服务。(2)初始化IDisplay指针;该指针是Brew的标准指针,用于访问IDisplay接口函数和用于屏幕输出操作。(3)初始化由外部分配的消息通讯标识(ID);该ID由调用程序在初始化DLL之前为其分配,在初始化时传递给DLL。(4)初始化可操作的目录路径。该目录由调用程序在初始化DLL之前为DLL分配。动态链接库的句柄所包含的信息是与该动态库的具体功能相关的,不同的动态库句柄内容可能不相同,但应包含以下的基本信息A、消息处理函数,用于调用程序与动态链接库之间的消息通讯。B、反初始化函数,用户调用程序卸载该动态链接库时,对动态库中使用到的资源作必要的释放,如关闭文件、释放内存等,具体执行的操作和释放的资源与动态库的具体功能相关。C、用户自定义的其他与功能相关的数据结构,比如输出函数地址、输出对象地址等。在完成动态链接库的加载后,调用程序即可使用动态链接库,使用方式包括直接函数调用和消息驱动,如图6所示。这两种方式可以独立使用,但更多的是结合起来一起使用。(1)直接函数调用动态链接库将其提供的函数地址通过句柄输出,调用者可以直接调用这些输出函数。因此,直接函数调用的方式使用较为简单。(2)消息驱动动态链接库只输出消息处理函数接口,所有的功能处理均通过调用程序发送的消息来触发。消息驱动方式使用比较灵活,能实现更为强大的功能,如输出应用程序的入口地址等。参阅图7所示,消息驱动方式包含三种消息传递方式(1)调用程序发往动态链接库的消息。由调用程序直接调用动态链接库的消息处理函数,将消息传递给动态链接库。(2)动态链接库发往调用程序的消息。由动态链接库将消息发往Brew消息队列,指明接收者标识为调用程序,然后由Brew消息队列派发至调用程序。(3)动态链接库发往自身的消息(因为DLL中有些功能的实现是异步过程,这个过程需要通过消息通知实现。发往自身的消息,是为了完成DLL内部的异步操作)。由动态链接库将消息发往Brew消息队列,然后由Brew消息队列派发至调用程序,最后由调用程序再派发至相应的动态链接库。如图8所示,对于一个应用程序而言,可以加载多个动态链接库,各个动态链接库之间模块相互独立,应用程序可以直接使用动态链接库输出的功能。使用动态链接库功能的方式包括(1)使用动态链接库输出的函数。动态链接库可以输出函数指针,调用程序可以通过函数指针使用动态链接库输出的功能。(2)使用动态链接库输出的对象实例。动态链接库可以输出对象实例指针,调用程序可以通过该指针使用动态链接库输出的功能。(3)应用程序作为执行平台使用动态链接库。动态链接库可以输出一个应用程序入口地址,在这种情况下,调用程序作为应用程序运行平台存在,为动态链接库输出的应用程序提供所需的运行环境,并对其进行调度。应用程序加载并使用动态链接库的功能后,根据需要可以通过调用卸载函数卸载该动态链接库。卸载动态链接库的过程基本上与加载动态链接库的过程相反,如图9所示,其主要流程如下步骤300、停止动态链接库的执行。如果该动态链接库的某些功能代码正在执行,则停止该代码的执行。步骤310、反初始化动态链接库。反初始化主要目的是释放动态链接库用到的资源,如内存、文件、对象等,具体操作和释放的资源与动态链接库的功能实现相关。因为在加载动态链接库时,创建的句柄中保存了动态链接库的反初始化函数指针,所以,此时可以直接调用该反初始化函数,释放有关资源。步骤320、释放调用程序为动态链接库分配的内存空间。至此DLL的卸载过程完成。从上可知,使用动态链接库构建的Brew应用程序,其各个功能模块之间相对独立,如果程序的某个模块功能发生变化,或者增加了新的功能模块,只需通过网络下载新的动态链接库进行更新即可实现对Brew应用程序的动态升级。参阅图10A所示,通过网络对Brew应用程序进行升级的过程如下步骤400、Brew应用程序通过CDMA1X网络与位于互联网上的服务器建立IP连接,该服务器上保存有按前述的格式生成的新的动态链接库文件,如图10B所示。步骤410、从服务器下载需要更新的动态链接库文件。步骤420、Brew应用程序成功下载新的动态链接库文件后,卸载要替换的动态链接库文件。步骤430、Brew应用程序加载新的动态链接库文件,执行新的DLL功能完成Brew应用程序升级,如图10C所示。本发明通过在Brew平台上实现动态链接库,Brew应用程序可以调用动态链接库输出的函数或者应用程序入口地址,从而可改变目前Brew的单人小规模的开发方式,便于程序的模块化开发和管理,增强程序的扩展性;采用本发明还能够很容易地实现Brew程序的在线升级。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。权利要求1.一种在无线二进制运行环境(Brew)平台实现动态链接库的方法,其特征在于,包括如下步骤A、生成可执行的AIF(ArmImageFormat)结构的动态链接库文件,其中所述动态链接库文件中包含有用于初始化动态链接库的初始化代码;B、Brew平台的调用程序加载所述动态链接库文件,并在该加载过程中通过执行所述初始化代码得到该动态链接库的句柄;C、调用程序通过动态链接库的句柄调用加载的动态链接库。2.如权利要求1所述的方法,其特征在于,所述初始化代码位于所述动态链接库文件的可执行代码段。3.如权利要求1所述的方法,其特征在于,步骤B具体包括如下步骤B1、分配内存空间,并将动态链接库读入该内存空间;B2、初始化所述内存空间,使该内存空间分为只读数据段和执行代码段;B3、执行初始化代码初始化动态链接库和向调用程序返回动态链接库的句柄。4.如权利要求3所述的方法,其特征在于,步骤B3具体包括如下步骤B31、创建动态链接库的句柄实例;B32、初始化相关的变量和运行动态链接库所需的数据结构;B33、初始化动态链接库的句柄并返回给调用程序。5.如权利要求4所述的方法,其特征在于,初始化运行动态链接库所需的数据结构包括初始化IShell指针和IDisplay指针;初始化由外部分配的消息通信标识和可操作的目录路径。6.如权利要求1至5任一项所述的方法,其特征在于,所述动态链接库的句柄包括消息处理函数、反初始化函数及与功能相关的数据结构。7.如权利要求6所述的方法,其特征在于,该方法还包括调用程序卸载所述动态链接库。8.如权利要求7所述的方法,其特征在于,卸载动态链接库包括如下步骤停止动态链接库中正在执行的功能代码;执行反初始化函数释放动态链接库使用的相关资源;释放为动态链接库分配的内在空间。9.如权利要求1所述的方法,其特征在于,在步骤C中,调用程序通过直接调用句柄中的函数使用所述动态链接库;或者,调用程序通过句柄中的消息处理函数接口,利用消息驱动方式使用所述动态链接库。10.如权利要求1所述的方法,其特征在于,在步骤B之前还包括步骤B1、Brew平台中的应用程序通过网络与服务器建立连接并从服务器下载所述动态链接库文件。11.如权利要求10所述的方法,其特征在于,步骤B1中还利用下载的动态链接库文件替换需要更新的动态链接库文件。全文摘要本发明公开了一种在无线二进制运行环境(Brew)平台实现动态链接库的方法,该方法为生成可执行的AIF结构的动态链接库文件,其中所述动态链接库文件中包含有用于初始化动态链接库的初始化代码;Brew平台的应用程序加载所述动态链接库文件,并在该加载过程中通过执行所述初始化代码得到该动态链接库的句柄;应用程序通过动态链接库的句柄使用对应的动态链接库。采用本发明Brew应用程序不仅能够实现复杂功能,而且还能够增强程序的扩展性。文档编号G06F9/445GK1924805SQ20051009854公开日2007年3月7日申请日期2005年9月2日优先权日2005年9月2日发明者段雪峰,田边申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1