基于C++语言的远程函数调用方法、通信装置与流程

文档序号:11154683阅读:753来源:国知局
基于C++语言的远程函数调用方法、通信装置与制造工艺

本发明涉及远程数据处理技术领域,特别涉及一种基于C++语言的远程函数调用方法及一种通信装置。



背景技术:

爪哇(Java)是一种跨平台的程序设计语言。Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。在Java语言里,将类名和类生成对象方法的指针,组成类名的字符串,存放在哈希表里,通过查找字符串得到对应方法的指针,执行就可以生成对象,从而实现通过字符串来生成对应的对象。这是反射机制很好的应用且用途很广。

现在越来越多的产品需求是提供软件开发工具包(SDK,Software Development Kit)给用户进行二次开发,用户在本地主机编写功能代码,远程连接到远端设备并在远端执行对应的功能。但在C++语言中,在远程函数调用场景中,还没有具体的方法通过传输字符串产生函数调用的功能。



技术实现要素:

本发明实施例提供了一种基于C++语言的远程函数调用方法。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。

本发明的一个目的在于提供一种基于C++语言的远程函数调用方法。

在一些示意性实施例中,所述基于C++语言的远程函数调用方法包括:接收函数调用指令;将函数调用所需信息转化为设定格式的字符串;发送所述设定格式的字符串到远程服务端。其中,所述设定格式的字符串被远程服务端用于调用本地函数。

在一些可选实施例中,所述函数调用所需信息包括函数名、相关的类名。其中,所述函数名被所述远程服务端用于获取函数地址,所述相关的类名被所述远程服务端用于创建类实例。

在一些可选实施例中,将函数调用所需信息转化为设定格式的字符串包括:创建到所述远程服务端的连接实例;创建关联所述连接实例的特定类的代理对象;调用函数;将所述特定类的类名和所述函数的函数名进行数据打包,转化为设定格式的字符串。其中,所述特定类与所述函数相关联。

在一些可选实施例中,所述函数调用所需信息包括函数名、相关的类名,还包括相关参数;将函数调用所需信息转化为设定格式的字符串包括:创建到所述远程服务端的连接实例;创建关联所述连接实例的特定类的代理对象;调用函数;将所述特定类的类名、所述函数的函数名和相关参数进行数据打包,转化为设定格式的字符串。其中,所述特定类与所述函数相关联。

在另一些示意性实施例中,所述基于C++语言的远程函数调用方法包括:接收远程客户端发送的设定格式的字符串;解析所述字符串获得函数调用所需信息;调用本地函数。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名;其中,所述函数名用于获取函数地址,所述相关的类名用于创建类实例。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数;所述调用本地函数,包括:根据所述相关的类名创建类实例;根据所述函数名,利用所述类实例调用本地函数并传递所述相关参数。

本发明的另一个目的是提供一种通信装置。

在一些示意性实施例中,所述通信装置包括信息收发单元和中央处理单元,其中,所述中央处理单元包括接收函数调用指令的第一单元,和,将函数调用所需信息转化为设定格式的字符串的第二单元;所述设定格式的字符串通过所述信息收发单元被发送到远程服务端。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名,所述相关的类名被所述远程服务端用于创建类实例,所述函数名被所述远程服务端用于获取函数地址。

在一些可选实施例中,所述第二单元包括创建到所述远程服务端的连接实例的第一子单元,创建关联所述连接实例的特定类的代理对象的第二子单元,和,调用函数并将所述特定类的类名和所述函数的函数名进行数据打包转化为设定格式的字符串的第三子单元。其中,所述特定类与所述函数相关联。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数;所述第二单元包括创建到所述远程服务端的连接实例的第一子单元,创建关联所述连接实例的特定类的代理对象的第二子单元,和,调用函数并将所述特定类的类名、所述函数的函数名及所述相关参数进行数据打包转化为设定格式的字符串的第四子单元。其中,所述特定类与所述函数相关联。

在另一些示意性实施例中,所述通信装置包括信息收发单元和中央处理单元,其中,所述信息收发单元用于接收远程客户端发送的设定格式的字符串;所述中央处理单元包括解析所述字符串获得函数调用所需信息的第四单元,和,调用本地函数的第五单元。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名。其中,所述函数名用于获取函数地址,所述相关的类名用于创建类实例。

在一些可选实施例中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数;所述第五单元包括根据所述类名创建类实例的第五子单元,和,根据所述函数名,利用所述类实例调用本地函数并传递所述相关参数的第七子单元。

用户在客户端基于C++语言调用函数时,采用上述实施例提供的技术方案,能够将用户在客户端调用函数的行为转化为向远程服务端发送包含函数调用信息的字符串的行为。通过客户端发送的字符串,服务端能够获得函数调用的相关信息并调用本地函数,从而使客户端能够基于C++语言进行远程调用函数。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的基于C++语言的远程函数调用的方法的流程示意图;

图2是根据另一示例性实施例示出的基于C++语言的远程函数调用的方法的流程示意图;

图3a、图3b是根据一应用实施例示出的基于C++语言的远程函数调用的方法的流程示意图;

图4是根据一示例性实施例示出的一种通信装置的框图

图5是根据另一示例性实施例示出的一种通信装置的框图。

具体实施方式

以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。其他实施方案可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,各实施方案可以被单独地或总地用术语“发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。本文中,诸如第一和第二等之类的关系术语仅仅用于将一个实体或者操作与另一个实体或操作区分开来,而不要求或者暗示这些实体或操作之间存在任何实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的方法、产品等而言,由于其与实施例公开的方法部分相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

图1示出一个基于C++语言的远程函数调用的示意性流程。

在该示意性实施例中,所述远程函数调用的方法包括:接收函数调用指令(步骤S11),将函数调用所需信息转化为设定格式的字符串(S12),发送设定格式的字符串到远程服务端(S13)。其中,所述设定格式的字符串被远程服务端用于调用本地函数。

用户在客户端基于C++语言编写程序时,当用户在客户端调用函数时,采用本实施例提供的示意性流程,能够将函数调用行为转化为向远程服务端发送字符串的行为。通过客户端发送的字符串,服务端能够获得函数调用的相关信息并调用本地函数,从而使客户端能够基于C++语言进行远程调用函数。

在一些可选实施方式中,函数调用所需信息包括函数名和相关的类名。所述设定格式的字符串也包含函数名和相关的类名。将函数调用所需信息转化为设定格式的字符串包括:创建到所述远程服务端的连接实例;创建关联所述连接实例的特定类的代理对象;调用函数;将所述特定类的类名和所述函数的函数名进行数据打包,转化为设定格式的字符串。在一些可选实施方式中,所述特定类与所述函数相关联。

通过客户端发送的字符串,服务端能够获得函数名和相关的类名,进而能够创建类实例、获取函数地址并调用本地函数,从而使客户端能够基于C++语言进行远程调用函数。

在一些可选实施方式中,函数调用所需信息包括函数名和相关的类名,还包括相关参数。相应地,所述设定格式的字符串也包含函数名和相关的类名,还包含相关参数。将函数调用所需信息转化为设定格式的字符串包括:创建到所述远程服务端的连接实例;创建关联所述连接实例的特定类的代理对象;调用函数;将所述特定类的类名、所述函数的函数名和相关参数进行数据打包,转化为设定格式的字符串。在一些可选实施方式中,所述特定类与所述函数相关联。采用本实施例,通过提供包含类名、函数名和参数的字符串,不仅实现远程调用函数且支持函数变长参数,解决了服务端接收到函数调用请求数据后无法转换为函数调用的问题。

在一些可选实施方式中,发送所述设定格式的字符串到远程服务端后,还包括:接收所述远程服务端发送的函数调用结果。

图2示出另一个基于C++语言的远程函数调用的示意性流程。

在该示意性实施例中,所述远程函数调用的方法包括:接收远程客户端发送的设定格式的字符串(步骤S21),解析所述字符串获得函数调用所需信息(步骤S22),调用本地函数(步骤S23)。

在一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名,其中,函数名用于获取函数地址,相关的类名用于创建类实例。所述调用本地函数,包括:根据所述函数名,利用所述类实例调用本地函数。

在一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数,所述相关参数被用于函数调用。所述调用本地函数,包括:根据所述函数名,利用所述类实例调用本地函数并传递所述相关参数。

在一些可选实施方式中,调用本地函数后还包括:将函数调用结果发送给所述远程客户端。

在一个应用场景中,用户的主机作为客户端通过网络连接到机器人服务端,用户在自己的主机上利用提供的SDK编写需要实现的功能代码,例如控制机器人前进。函数调用的部分伪代码如表1所示。

表1基于C++的远程函数调用部分伪代码

在该应用场景中,SDK将前进函数forward()的调用过程转化为向机器人服务端发送字符串的行为,示意性的流程如图3a所示。

步骤S311,接收前进函数forward()的调用指令。

步骤S312,创建到机器人服务端的连接实例broker。

步骤S313,创建关联所述连接实例的动作类代理对象motionProxy。

步骤S314,调用前进函数proxy.forward()。

需要说明的是,控制机器人前进是控制机器人做出前进的动作,属于控制机器人做出动作,因此在创建代理对象时需要创建动作类代理对象。即,代理对象的类与所调用的函数之间具有关联性。在其它场景中,例如控制机器人进行语音识别或图像识别,在调用语音识别函数或图像识别函数时,代理对象的类将随之改变,例如为识别类代理对象,而不是动作类代理对象。

步骤S315,调用C++中通用的函数Callfunction将类名“motionProxy”、函数名“forward()”及参数列表进行数据打包,转化为设定格式的字符串。

步骤S316,发送设定格式的字符串到机器人服务端。

步骤S317,等待机器人服务端返回函数调用的结果。

机器人服务端接收字符串并调用函数的示意性流程如图3b所示。

步骤S321,接收客户端主机发送的设定格式的字符串;

步骤S322,解析字符串获得函数名“forward()”、类名“motionProxy”和参数列表。

步骤S323,根据类名“motionProxy”创建类实例。可选的部分可供参考的伪代码包括“instance=new motionProxy”。

步骤S324,根据函数名“forward()”,利用类实例调用本地函数并传递参数列表。可选的部分可供参考的伪代码包括“instance->forward(params)”。

步骤S325,将函数调用结果发送给客户端主机。

图4示出一个可选的通信装置的示意性结构。

该示意性实施例中,所述通信装置包括信息收发单元S1和中央处理单元S2,所述中央处理单元S2包括第一单元S201和第二单元S202。

第一单元S201用于接收函数调用指令。第二单元S202用于将函数调用所需信息转化为设定格式的字符串。信息收发单元S1将所述设定格式的字符串发送到远程服务端。

在一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名。其中,所述函数名被所述远程服务端用于获取函数地址,所述相关的类名被所述远程服务端用于创建类实例。第二单元S202包括创建到所述远程服务端的连接实例的第一子单元,创建关联所述连接实例的特定类的代理对象的第二子单元,和,调用函数并将所述特定类的类名和所述函数的函数名进行数据打包转化为设定格式的字符串的第三子单元。其中,所述特定类与所述本地函数相关联。

在另一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数。第二单元S202包括创建到所述远程服务端的连接实例的第一子单元,创建关联所述连接实例的特定类的代理对象的第二子单元,和,调用函数并将所述特定类的类名、所述函数的函数名及所述相关参数进行数据打包转化为设定格式的字符串的第四子单元。

在一些可选实施方式中,所述信息收发单元还用于在发送所述设定格式的字符串到远程服务端后,接收所述远程服务端发送的函数调用结果。

图5示出另一个可选的通信装置的示意性结构。

该示意性实施例中,所述通信装置包括信息收发单元S3和中央处理单元S4。信息收发单元S3用于接收远程客户端发送的设定格式的字符串;中央处理单元S4包括第四单元S401和第五单元S402。

第四单元S401用于解析所述字符串获得函数调用所需信息,第五单元S402用于调用本地函数。

在一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名。其中,所述函数名用于获取函数地址,所述相关的类名用于创建类实例。第五单元S402包括根据所述相关的类名创建类实例的第五子单元,和,根据所述函数名,利用所述类实例调用本地函数的第六子单元。

在另一些可选实施方式中,所述函数调用所需信息包括函数名和相关的类名,还包括相关参数;所述第五单元包括根据所述相关的类名创建类实例的第五子单元,和,根据所述函数名,利用所述类实例调用本地函数并传递所述相关参数的第七子单元。

在一些可选实施方式中,信息收发单元S3还用于将函数调用结果发送给所述远程客户端。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由处理器执行以完成前文所述的方法。上述非临时性计算机可读存储介质可以是只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁带和光存储设备等。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。所属技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本文所披露的实施例中,应该理解到,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的流程及结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

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