基于银河锐华操作系统的C++适配层的制作方法

文档序号:23187004发布日期:2020-12-04 14:15阅读:387来源:国知局
基于银河锐华操作系统的C++适配层的制作方法

本发明涉及,具体地,涉及基于银河锐华操作系统的c++适配层。



背景技术:

目前存在的js/c++混合开发技术使用较多的为nodejs框架以及qwebkit。

对于nodejs框架来说,若要进行js与c++进行混合编译,需要nodejs扩展模块开发支持包以及node-gyp构建自动化工具支持编译,而这些模块均需要根据不用移动设备进行移植,从而带来较大的工作量以及不可控性,可移植性差。此外,在使用nodejs框架构建工程时,需要编写node包管理文件以及模块描述文件进行大量编译配置工作,使得代码的开发难度,工作量增加。

而qwebkit则是用于在基于qt框架开发的应用中嵌入web控件并与之进行交互,并不能满足在基于html5/css/js框架开发的应用中进行js/c++混合开发的需求。

c++适配层通过扩展系统接口的方式实现js与c++的交互调用,c++代码的编译完全使用系统的编译器进行,使得c++的开发与编译简单易行,不需要由于c++适配层需要运行不同的移动设备上而产生额外的移植工作;此外系统接口的方式也使得在js端与c++代码的交互变得简单,开发难度大大降低。

由于html5/css/js框架的使用使得前段开发变得更加简单、高效,对前端的布局、字体、颜色、背景等效果实现了更加精确的控制,且维护成本更低,这些优势使得html5/css/js成为前端开发的趋势。但是对于运行在移动操作系统中的应用尤其是系统应用来说,在很多时候需要针对某些特色硬件设备进行操控与访问,而html5/css/js框架很难直接与硬件驱动进行对接;此外,对于一些算法或功能,在很多情况下存在即有的c/c++实现,而对其进行js移植则存在很大的工作量。这些问题都使得在移动操作系统上实现js/c++的混合应用开发变得非常必要。而c++适配层的实现能够在对现有的c++代码进行简单封装后实现与js的交互调用,从而最大限度的实现代码的复用,减少开发成本。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种基于银河锐华操作系统的c++适配层。

根据本发明提供的一种基于银河锐华操作系统的c++适配层,包括:

c++插件库:根据预设的插件库的基类,c++插件库继承该插件库的基类并根据具体功能需求实现桥接类,桥接类作为c++插件库接受js的调用指令的入口;

插件库模块管理器:将每个c++插件库作为一个模块进行动态管理,保存有系统对c++插件库调用所需的信息;

插件对象管理器:每个应用将独立拥有一个专属于该应用进程的插件对象管理器,插件对象管理器向应用封装接口,应用通过所述接口与c++插件库进行交互。

优选地,所述桥接类的主要功能包括:

插件的初始化、插件方法调用;

所述实现桥接类的方法包括:

调用方法的重载实现,调用方法接受js传递的操作指令,以及指令参数,根据指令插件库进行相应操作决策,并将执行最终结果返回到js。

优选地,还包括插件回调方法:

通过id唯一标示每一次回调过程,并使用一个字符串参数传递回调参数,字符串通用需要c++插件库根据需要进行编解码。

优选地,所述统对c++插件库调用所需的信息包括:

插件库句柄:用于保存c++插件库的句柄;

插件库桥接类实例指针:用于保存桥接类的实例;

回调方法指针:用于保存c++插件库发起对js调用的入口方法;

注册回调指针方法:用于系统向插件库中进行回调方法的注册;

删除回调指针方法:用于系统移出插件库中的回调方法;

调用方法:用于系统发起对c++插件库的调用;

每当发起加载一个c++插件库的请求时,系统为该插件库动态生成插件模块进行保存;

当使用js进行c++库调用时,插件库模块管理器将通过c++插件库的句柄调用调用方法;

若c++插件库需要进行回调,需要首先通过注册回调指针方法向插件库中注册回调方法指针进行保存,插件库通过插件模块中保存的回调方法指针进行回调。

优选地,所述插件对象管理器向上层应用封装的接口包括:

c++插件库初始化接口init:用于动态加载指定c++插件库,创建该库的模块实例;c++插件库调用接口exec:用于调用c++插件库中的指定功能;

注册回调方法接口addlistener:用于注册接受并处理c++插件库中回调事件的方法;

移除回调方法接口removelistener:用于停止接受与处理c++插件库中的回调事件;

检测库是否加载接口isloadedlibrary:用于检测某指定c++插件库是否被成功加载;

卸载c++插件库接口unloadlibrary:用于卸载指定的c++插件库。

优选地,所述c++适配层通过接口的方式向上层应用提供与c++插件库的交互调用功能。

优选地,所述c++适配层通过接口的方式向上层应用提供与c++插件库的交互调用功能包括:

应用通过c++插件库初始化接口init加载指定路径的c++插件库,并为该c++插件库指定一个唯一的标示符;

通过调用执行方法exec指定操作字段,c++插件库根据操作字段进行指定操作;

上层应用调用注册回调方法接口addlistener,用于接收处理c++插件库的回调事件,回调事件中包括用于标示每个回调的唯一id,以及传递的参数,回调事件处理方法通过识别不同的回调id来进行不同的处理;

当应用于c++插件库的交互调用结束时,通过调用移除回调方法接口removelistener接口结束c++插件库回调的监听,通过调用卸载c++插件库接口unloadlibrary卸载指定c++插件库。

与现有技术相比,本发明具有如下的有益效果:

c++适配层通过对c++代码进行特定封装后能够与js代码进行交互调用,这就使得在移动操作系统中基于html5/css/js开发的应用能够方便、安全的与底层硬件设备进行交互,也使得一些通过c/c++实现的即有功能模块能够快速移植,这些都使得应用开发的难度降低,工作量减少,功能更加多样化,也使得移动终端中在针对特殊外设开发特殊应用时不需要进行操作系统的定制,从而缩短开发周期,提高应用的可移植性。

在js端能够通过简单的系统接口调用便能够实现与c++代码的交互,不需要引入额外的第三方框架,从而使得应用对c++代码的调用变得更加简单与安全。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明提供的c++适配层的架构示意图。

图2为本发明提供的上层应用与c++插件库的交互流程示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

根据本发明提供的一种基于银河锐华操作系统的c++适配层,包括:

c++插件库:根据预设的插件库的基类,c++插件库继承该插件库的基类并根据具体功能需求实现桥接类,桥接类作为c++插件库接受js的调用指令的入口;

插件库模块管理器:将每个c++插件库作为一个模块进行动态管理,保存有系统对c++插件库调用所需的信息;

插件对象管理器:每个应用将独立拥有一个专属于该应用进程的插件对象管理器,插件对象管理器向应用封装接口,应用通过所述接口与c++插件库进行交互。

具体地,所述桥接类的主要功能包括:

插件的初始化、插件方法调用;

所述实现桥接类的方法包括:

调用方法的重载实现,调用方法接受js传递的操作指令,以及指令参数,根据指令插件库进行相应操作决策,并将执行最终结果返回到js。

具体地,还包括插件回调方法:

通过id唯一标示每一次回调过程,并使用一个字符串参数传递回调参数,字符串通用需要c++插件库根据需要进行编解码。

具体地,所述统对c++插件库调用所需的信息包括:

插件库句柄:用于保存c++插件库的句柄;

插件库桥接类实例指针:用于保存桥接类的实例;

回调方法指针:用于保存c++插件库发起对js调用的入口方法;

注册回调指针方法:用于系统向插件库中进行回调方法的注册;

删除回调指针方法:用于系统移出插件库中的回调方法;

调用方法:用于系统发起对c++插件库的调用;

每当发起加载一个c++插件库的请求时,系统为该插件库动态生成插件模块进行保存;

当使用js进行c++库调用时,插件库模块管理器将通过c++插件库的句柄调用调用方法;

若c++插件库需要进行回调,需要首先通过注册回调指针方法向插件库中注册回调方法指针进行保存,插件库通过插件模块中保存的回调方法指针进行回调。

具体地,所述插件对象管理器向上层应用封装的接口包括:

c++插件库初始化接口init:用于动态加载指定c++插件库,创建该库的模块实例;c++插件库调用接口exec:用于调用c++插件库中的指定功能;

注册回调方法接口addlistener:用于注册接受并处理c++插件库中回调事件的方法;

移除回调方法接口removelistener:用于停止接受与处理c++插件库中的回调事件;

检测库是否加载接口isloadedlibrary:用于检测某指定c++插件库是否被成功加载;

卸载c++插件库接口unloadlibrary:用于卸载指定的c++插件库。

具体地,所述c++适配层通过接口的方式向上层应用提供与c++插件库的交互调用功能。

具体地,所述c++适配层通过接口的方式向上层应用提供与c++插件库的交互调用功能包括:

应用通过c++插件库初始化接口init加载指定路径的c++插件库,并为该c++插件库指定一个唯一的标示符;

通过调用执行方法exec指定操作字段,c++插件库根据操作字段进行指定操作;

上层应用调用注册回调方法接口addlistener,用于接收处理c++插件库的回调事件,回调事件中包括用于标示每个回调的唯一id,以及传递的参数,回调事件处理方法通过识别不同的回调id来进行不同的处理;

当应用于c++插件库的交互调用结束时,通过调用移除回调方法接口removelistener接口结束c++插件库回调的监听,通过调用卸载c++插件库接口unloadlibrary卸载指定c++插件库。

下面通过优选例,对本发明进行更为具体地说明。

优选例1:

本发明涉及在基于html5/css/js框架进行上层应用开发的操作系统中使用js/c++进行混合开发的技术,尤其涉及在银河锐华移动操作系统中进行js/c++混合应用开发的技术。

基于银河锐华操作系统的c++适配层通过插件的方式,动态加载用户按照特定方式实现的功能性c++插件库文件,并以系统接口的形式实现js与c++插件库之间的交互调用。

c++适配层的架构图如下图1所示。

1、插件库:

用户需要按照特定方式进行c++插件库的开发。

c++适配层提供了一个插件库的基类,c++插件库应继承该基类根据具体功能需求实现一个桥接类,桥接类将作为c++插件库接受js的调用指令的入口。桥接类的主要功能包括:插件的初始化、插件方法调用。继承插件库基类实现桥接类的关键在于调用方法的重载实现,调用方法接受js传递的操作指令,以及指令参数,根据指令插件库进行相应操作决策,并将执行最终结果返回到js。由于指令参数在数量以及类型上均存在不确定性,因此在c++插件库基类声明了一个字符串类型作为指令参数,需要用户根据自己的需要在传入时对参数列表进行编码,并在c++适配层中进行相应的解码工作,以保证参数正确的传递。

c++插件库需要按照约定声明一个全局插件实例,该实例将在c++插件库被加载时被初始化,该实例的指针向外提供用于进行插件库中的方法调用。

此外,c++适配层还提供一个全局方法用于插件回调。在该回调方法中,将通过id唯一标示每一次回调过程,并使用一个字符串参数传递回调参数,字符串通用需要c++插件库根据需要进行编解码。

2、插件库模块管理器

插件库模块管理器将每个c++插件库作为一个模块进行动态管理,插件模块中保存有系统对该c++插件库调用所需的信息,具体如下:

插件库句柄:用于保存c++插件库的句柄。

插件库桥接类实例指针:用于保存桥接类的实例。

回调方法指针:用于保存c++插件库发起对js调用的入口方法。

注册回调指针方法:用于系统向插件库中进行回调方法的注册。

删除回调指针方法:用于系统移出插件库中的回调方法。

调用方法:用于系统发起对c++插件库的调用。在该方法中,将通过保存的桥接类实例指针调用用户基于插件库基类实现的调用方法。

每当应用发起加载一个c++插件库的请求时,系统为该插件库动态生成插件模块进行保存;当应用使用js进行c++库调用时,插件库模块管理器将通过c++插件库的句柄调用调用方法;若c++插件库需要进行回调,需要首先通过注册回调指针方法向插件库中注册回调方法指针进行保存,插件库通过插件模块中保存的回调方法指针进行回调。

3、插件对象管理器

每个应用将独立拥有一个专属于该应用进程的插件对象管理器,插件对象管理器向应用封装接口,应用通过这些接口与c++插件库进行交互。插件对象管理器向上层应用封装的主要接口包括:

c++插件库初始化接口(init):用于动态加载指定c++插件库,创建该库的模块实例;

c++插件库调用接口(exec):用于调用c++插件库中的指定功能;

注册回调方法接口(addlistener):用于注册接受并处理c++插件库中回调事件的方法;

移除回调方法接口(removelistener):用于停止接受与处理c++插件库中的回调事件;

检测库是否加载接口(isloadedlibrary):用于检测某指定c++插件库是否被成功加载;

卸载c++插件库接口(unloadlibrary):用于卸载指定的c++插件库。

4、应用与c++插件库的交互调用

c++适配层通过接口的方式向上层应用提供与c++插件库的交互调用功能。

首先应用通过初始化接口(init)加载指定路径的c++插件库,并为该c++插件库指定一个唯一的标示符;再通过调用执行方法(exec)指定操作字段,c++插件库根据操作字段进行指定操作;上层应用注册回调事件处理方法(addlistener),用于接收处理c++插件库的回调事件,回调事件中包括用于标示每个回调的唯一id,以及传递的参数,回调事件处理方法通过识别不同的回调id来进行不同的处理;当应用于c++插件库的交互调用结束时,通过调用删除回调监听(removelistener)接口结束c++插件库回调的监听,通过调用卸载库接口卸载指定c++插件库。上层应用与c++插件库的交互流程图如下图2所示。

优选例2:

c++插件库的实现

用户通过继承c++适配层提供的基类按照自己的功能需求实现c++插件类。该插件类的实现关键在于对方法execute的重载实现,该方法的核心在于通过对指令参数的解析来选择需要执行的处理流程,并解析传入参数进行相应的处理。

一个简单的加、减运算c++插件库的实现。在该实现过程中,使用“加”、“减”作为操作指令,并将参数列表按照json格式进行解析。在桥接类的实现中,调用方法通过对指令的判断来明确此次调用过程为“加”或是“减”;然后通过解析json格式的传入参数;在进行相应的功能实现后将实现结果进行json封装后返回。

优选例3:

应用与c++插件库交互调用的实现

上层应用通过插件对象管理器加载c++插件库,并进行对c++插件库的调用,添加回调监听器来监听并处理c++插件库中的回调事件。

一个简单的对上述加、减运算c++插件库的交互js示例如下所示。首先应用需要实例化一个插件库对象管理器,并调用初始化接口对c++插件库进行初始化;然后通过注册回调方法接口注册一个回调方法;最后将参数进行json格式封装后通过c++插件库调用接口进行具体功能的调用。

在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1