客户端与应用的通讯方法及装置.pdf

上传人:b*** 文档编号:1635527 上传时间:2018-06-30 格式:PDF 页数:28 大小:1.77MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310746724.6

申请日:

2013.12.27

公开号:

CN104750470A

公开日:

2015.07.01

当前法律状态:

实审

有效性:

审中

法律详情:

著录事项变更IPC(主分类):G06F 9/44变更事项:申请人变更前:广州华多网络科技有限公司变更后:广州华多网络科技有限公司变更事项:地址变更前:510655 广东省广州市黄埔大道中309号羊城创意产业园3-08栋变更后:511446 广东省广州市番禺区南村镇万博商务区万达广场B1座28层|||实质审查的生效IPC(主分类):G06F 9/44申请日:20131227|||公开

IPC分类号:

G06F9/44

主分类号:

G06F9/44

申请人:

广州华多网络科技有限公司

发明人:

吕松梅

地址:

510655广东省广州市黄埔大道中309号羊城创意产业园3-08栋

优先权:

专利代理机构:

北京三高永信知识产权代理有限责任公司11138

代理人:

张耀光

PDF下载: PDF下载
内容摘要

本发明公开了一种客户端与应用的通讯方法及装置,属于计算机技术领域。所述方法包括:将采用第二编程语言开发的应用封装于组件对象模型COM中;通过组件对象模型COM的调度接口与采用第二编程语言开发的应用进行通讯,从调度接口继承的调用函数具有跨语言调用应用内方法的功能。本发明解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;实现了跨语言的应用能够接入客户端,并与客户端进行通讯的效果。

权利要求书

权利要求书
1.  一种客户端与应用的通讯方法,其特征在于,用于采用第一编程语言开发的客户端中,所述客户端用于与采用第二编程语言开发的应用进行通讯,所述方法,包括:
将所述采用第二编程语言开发的应用封装于组件对象模型COM中;
通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。

2.  根据权利要求1所述的方法,其特征在于,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,包括:
通过所述调度接口的对象调用分发号获取函数;
对于所述采用第二编程语言开发的应用内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述应用中与所述分发号对应的方法。

3.  根据权利要求2所述的方法,其特征在于,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯之前,还包括:
通过预设浏览器控件创建COM对象;
通过所述COM对象获取IHTMLDocument2接口的Script对象;
将所述Script对象作为所述调度接口的对象。

4.  根据权利要求2所述的方法,其特征在于,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯之前,还包括:
通过预设动画控件创建COM对象;
将所述COM对象作为所述调度接口的对象。

5.  根据权利要求1至3任一所述的方法,其特征在于,在所述采用第二编程语言开发的应用为web类型的应用时,所述方法,还包括:
预先在所述Web类型的应用内嵌入动画项目模块;
通过所述动画项目模块将动画文件加载在所述Web类型的应用中展示。

6.  一种客户端与应用的通讯方法,其特征在于,用于采用第二编程语言开发的应用中,所述应用用于与采用第一编程语言开发的客户端进行通讯,所述方法,包括:
预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中;
通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。

7.  根据权利要求6所述的方法,其特征在于,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,包括:
通过所述调度接口的对象调用分发号获取函数;
对于所述采用第一编程语言开发的客户端内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述客户端中与所述分发号对应的方法。

8.  根据权利要求7所述的方法,其特征在于,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯之前,还包括:
接收用于调用所述客户端内的方法的触发信号;
根据所述触发信号触发window.external函数调用GetEeternal函数;
通过所述GetEeternal函数返回的参数作为所述调度接口的指针;
根据返回的所述调度接口的指针获取外部网页浏览器对象;
将所述外部网页浏览器对象作为所述调度接口的对象。

9.  根据权利要求7所述的方法,其特征在于,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯之前,还包括:
接收用于调用所述客户端内的方法的触发请求;
根据所述触发请求触发接收器对象调用所述组件对象模型COM中的QueryInterface函数;
通过所述QueryInterface函数检测IConnectionPointContainer接口是否可用;
若检测结果为可用,则通过所述QueryInterface函数向所述应用返回指针,所述指针用于得到所述IConnectionPointContainer接口中的连接点对象;
在接收到所述指针之后,根据所述指针指向的所述连接点对象建立所述应用与所述连接点对象之间的连接;
通过所述连接点对象调用所述接收器对象;
将所述接收器对象作为所述调度接口的对象。

10.  根据权利要求8所述的方法,其特征在于,所述根据所述触发信号触发window.external函数调用GetEeternal函数之前,还包括:
通过预设浏览器控件创建客户端站台对象;
通过所述客户端站台对象创建IDocHostUIHandler接口,所述IDocHostUIHandler接口用于根据所述触发信号触发window.external函数调用GetEeternal函数。

11.  一种客户端与应用的通讯装置,其特征在于,用于采用第一编程语言开发的客户端中,所述客户端用于与采用第二编程语言开发的应用进行通讯,所述装置,包括:
应用封装模块,用于将所述采用第二编程语言开发的应用封装于组件对象模型COM中;
应用通讯模块,用于通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。

12.  根据权利要求11所述的装置,其特征在于,所述应用通讯模块,包括:函数调用单元、分发号获取单元和方法调用单元;
所述函数调用单元,用于通过所述调度接口的对象调用分发号获取函数;
所述分发号获取单元,用于对于所述采用第二编程语言开发的应用内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
所述方法调用单元,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述应用中与所述分发号对应的方法。

13.  根据权利要求12所述的装置,其特征在于,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:
第一组件创建模块,用于通过预设浏览器控件创建COM对象;
脚本对象获取模块,用于通过所述COM对象获取IHTMLDocument2接口的Script对象;
脚本对象运用模块,用于将所述Script对象作为所述调度接口的对象。

14.  根据权利要求12所述的装置,其特征在于,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:
第二组件创建模块,用于通过预设动画控件创建COM对象;
组件对象运用模块,用于将所述COM对象作为所述调度接口的对象。

15.  根据权利要求11至13任一所述的装置,其特征在于,在所述采用第二编程语言开发的应用为web类型的应用时,所述装置,还包括:
动画嵌入模块,用于预先在所述Web类型的应用内嵌入动画项目模块;
动画加载模块,用于通过所述动画项目模块将动画文件加载在所述Web类型的应用中展示。

16.  一种客户端与应用的通讯装置,其特征在于,用于采用第二编程语言开发的应用中,所述应用用于与采用第一编程语言开发的客户端进行通讯,所述装置,包括:
预先封装模块,用于预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中;
客户端通讯模块,用于通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。

17.  根据权利要求16所述的装置,其特征在于,所述客户端通讯模块,包括:调用函数单元、分发号取得单元和调用方法单元;
所述调用函数单元,用于通过所述调度接口的对象调用分发号获取函数;
所述分发号取得单元,用于对于所述采用第一编程语言开发的客户端内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
所述调用方法单元,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述客户端中与所述分发号对应的方法。

18.  根据权利要求17所述的装置,其特征在于,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:
信号接收模块,用于接收用于调用所述客户端内的方法的触发信号;
函数触发模块,用于根据所述触发信号触发window.external函数调用GetEeternal函数;
指针返回模块,用于通过所述GetEeternal函数返回的参数作为所述调度接口的指针;
对象获得模块,用于根据返回的所述调度接口的指针获取外部网页浏览器对象;
对象转换模块,用于将所述外部网页浏览器对象作为所述调度接口的对象。

19.  根据权利要求17所述的方法,其特征在于,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:
请求接收模块,用于接收用于调用所述客户端内的方法的触发请求;
对象触发模块,用于根据所述触发请求触发接收器对象调用所述组件对象模型COM中的QueryInterface函数;
接口检测模块,用于通过所述QueryInterface函数检测IConnectionPointContainer接口是否可用;
返回指针模块,用于若检测结果为可用,则通过所述QueryInterface函数向所述应用返回指针,所述指针用于得到所述IConnectionPointContainer接口中的连接点对象;
连接建立模块,用于在接收到所述指针之后,根据所述指针指向的所述连接点对象建立所述应用与所述连接点对象之间的连接;
对象调用模块,用于通过所述连接点对象调用所述接收器对象;
对象转化模块,用于将所述接收器对象作为所述调度接口的对象。

20.  根据权利要求18所述的装置,其特征在于,所述装置,还包括:
站台对象创建模块,用于通过预设浏览器控件创建客户端站台对象;
接口创建模块,用于通过所述客户端站台对象创建IDocHostUIHandler接口,所述IDocHostUIHandler接口用于根据所述触发信号触发window.external函数调用GetEeternal函数。

说明书

说明书客户端与应用的通讯方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种客户端与应用的通讯方法及装置。
背景技术
客户端可以为第三方开发者提供多个开放形式的API(Application Programming Interface,应用程序编程接口),第三方开发者开发的不同应用通过客户端提供的API接口与客户端进行接入和通讯,从而实现丰富的功能。比如,团队语音工具客户端具有基本的团队语音功能,同时该客户端提供有多个开放形式的API接口,第三方开发者A开发的游戏应用可以通过API接口接入该客户端,使得该客户端具有游戏的功能;第三方开发者B开发的群体互动应用可以通过API接口接入该客户端,使得该客户端具有群体互动的功能。
目前的客户端通常都是由C++进行开发的。C++是一种面向对象的编程语言,其极为完善的对象处理机制和方法能够充分满足客户端需要实现的各种功能。显而易见地,客户端向第三方开发者提供的API接口也都是C++类型的,所以第三方开发者开发的应用必须是支持C++类型的API接口的应用,这些应用通常都是DLL(Dynamic Link Library,动态链接库)类型的应用。换句话说,目前只有DLL类型的应用才能够与采用C++语言开发的客户端进行接入和通讯。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:单纯的DLL类型的应用已经无法满足用户的需求,因为很多应用都是采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用,而这些应用目前是无法接入采用C++语言开发的客户端并与该客户端进行通讯的。
发明内容
有鉴于此,本发明实施例提供了一种客户端与应用的通讯方法及装置。所 述技术方案如下:
第一方面,提供了一种客户端与应用的通讯方法,用于采用第一编程语言开发的客户端中,所述客户端用于与采用第二编程语言开发的应用进行通讯,所述方法,包括:
将所述采用第二编程语言开发的应用封装于组件对象模型COM中;
通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。
在第一方面的第一种可能的实施方式中,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,包括:
通过所述调度接口的对象调用分发号获取函数;
对于所述采用第二编程语言开发的应用内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述应用中与所述分发号对应的方法。
结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯之前,还包括:
通过预设浏览器控件创建COM对象;
通过所述COM对象获取IHTMLDocument2接口的Script对象;
将所述Script对象作为所述调度接口的对象。
结合第一方面的第一种可能的实施方式,在第一方面的第三种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯之前,还包括:
通过预设动画控件创建COM对象;
将所述COM对象作为所述调度接口的对象。
结合第一方面、第一方面的第一种可能的实施或者第一方面的第二种可能的实施方式,在第一方面的第四种可能的实施方式中,在所述采用第二编程语 言开发的应用为web类型的应用时,所述方法,还包括:
预先在所述Web类型的应用内嵌入动画项目模块;
通过所述动画项目模块将动画文件加载在所述Web类型的应用中展示。
第二方面,提供了一种客户端与应用的通讯方法,用于采用第二编程语言开发的应用中,所述应用用于与采用第一编程语言开发的客户端进行通讯,所述方法,包括:
预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中;
通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。
在第二方面的第一种可能的实施方式中,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,包括:
通过所述调度接口的对象调用分发号获取函数;
对于所述采用第一编程语言开发的客户端内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述客户端中与所述分发号对应的方法。
结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯之前,还包括:
接收用于调用所述客户端内的方法的触发信号;
根据所述触发信号触发window.external函数调用GetEeternal函数;
通过所述GetEeternal函数返回的参数作为所述调度接口的指针;
根据返回的所述调度接口的指针获取外部网页浏览器对象;
将所述外部网页浏览器对象作为所述调度接口的对象。
结合第二方面的第一种可能的实施方式,在第二方面的第三种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯之前,还包括:
接收用于调用所述客户端内的方法的触发请求;
根据所述触发请求触发接收器对象调用所述组件对象模型COM中的QueryInterface函数;
通过所述QueryInterface函数检测IConnectionPointContainer接口是否可用;
若检测结果为可用,则通过所述QueryInterface函数向所述应用返回指针,所述指针用于得到所述IConnectionPointContainer接口中的连接点对象;
在接收到所述指针之后,根据所述指针指向的所述连接点对象建立所述应用与所述连接点对象之间的连接;
通过所述连接点对象调用所述接收器对象;
将所述接收器对象作为所述调度接口的对象。
结合第二方面的第二种可能的实施方式,在第二方面的第四种可能的实施方式中,所述根据所述触发信号触发window.external函数调用GetEeternal函数之前,还包括:
通过预设浏览器控件创建客户端站台对象;
通过所述客户端站台对象创建IDocHostUIHandler接口,所述IDocHostUIHandler接口用于根据所述触发信号触发window.external函数调用GetEeternal函数。
第三方面,提供了一种客户端与应用的通讯装置,用于采用第一编程语言开发的客户端中,所述客户端用于与采用第二编程语言开发的应用进行通讯,所述装置,包括:
应用封装模块,用于将所述采用第二编程语言开发的应用封装于组件对象模型COM中;
应用通讯模块,用于通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。
在第三方面的第一种可能的实施方式中,所述应用通讯模块,包括:函数调用单元、分发号获取单元和方法调用单元;
所述函数调用单元,用于通过所述调度接口的对象调用分发号获取函数;
所述分发号获取单元,用于对于所述采用第二编程语言开发的应用内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
所述方法调用单元,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述应用中与所述分发号对应的方法。
结合第三方面的第一种可能的实施方式,在第三方面的第二种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:
第一组件创建模块,用于通过预设浏览器控件创建COM对象;
脚本对象获取模块,用于通过所述COM对象获取IHTMLDocument2接口的Script对象;
脚本对象运用模块,用于将所述Script对象作为所述调度接口的对象。
结合第三方面的第一种可能的实施方式,在第三方面的第三种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:
第二组件创建模块,用于通过预设动画控件创建COM对象;
组件对象运用模块,用于将所述COM对象作为所述调度接口的对象。
结合第三方面、第三方面的第一种可能的实施方式或者第三方面的第二种可能的实施方式,在第三方面的第四种可能的实施方式中,在所述采用第二编程语言开发的应用为web类型的应用时,所述装置,还包括:
动画嵌入模块,用于预先在所述Web类型的应用内嵌入动画项目模块;
动画加载模块,用于通过所述动画项目模块将动画文件加载在所述Web类型的应用中展示。
第四方面,提供了一种客户端与应用的通讯装置,用于采用第二编程语言开发的应用中,所述应用用于与采用第一编程语言开发的客户端进行通讯,所述装置,包括:
预先封装模块,用于预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中;
客户端通讯模块,用于通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。
在第四方面的第一种可能的实施方式中,所述客户端通讯模块,包括:调用函数单元、分发号取得单元和调用方法单元;
所述调用函数单元,用于通过所述调度接口的对象调用分发号获取函数;
所述分发号取得单元,用于对于所述采用第一编程语言开发的客户端内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号;
所述调用方法单元,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述客户端中与所述分发号对应的方法。
结合第四方面的第一种可能的实施方式,在第四方面的第二种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:
信号接收模块,用于接收用于调用所述客户端内的方法的触发信号;
函数触发模块,用于根据所述触发信号触发window.external函数调用GetEeternal函数;
指针返回模块,用于通过所述GetEeternal函数返回的参数作为所述调度接口的指针;
对象获得模块,用于根据返回的所述调度接口的指针获取外部网页浏览器对象;
对象转换模块,用于将所述外部网页浏览器对象作为所述调度接口的对象。
结合第四方面的第一种可能的实施方式,在第四方面的第三种可能的实施方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:
请求接收模块,用于接收用于调用所述客户端内的方法的触发请求;
对象触发模块,用于根据所述触发请求触发接收器对象调用所述组件对象模型COM中的QueryInterface函数;
接口检测模块,用于通过所述QueryInterface函数检测IConnectionPointContainer接口是否可用;
返回指针模块,用于若检测结果为可用,则通过所述QueryInterface函数向所述应用返回指针,所述指针用于得到所述IConnectionPointContainer接口中的连接点对象;
连接建立模块,用于在接收到所述指针之后,根据所述指针指向的所述连接点对象建立所述应用与所述连接点对象之间的连接;
对象调用模块,用于通过所述连接点对象调用所述接收器对象;
对象转化模块,用于将所述接收器对象作为所述调度接口的对象。
结合第四方面的第二种可能的实施方式,在第四方面的第四种可能的实施方式中,所述装置,还包括:
站台对象创建模块,用于通过预设浏览器控件创建客户端站台对象;
接口创建模块,用于通过所述客户端站台对象创建IDocHostUIHandler接口,所述IDocHostUIHandler接口用于根据所述触发信号触发window.external函数调用GetEeternal函数。
本发明实施例提供的技术方案带来的有益效果是:
采用第一编程语言开发的客户端通过将采用第二编程语言开发的应用封装于组件对象模型COM中,然后通过组件对象模型COM的调度接口与采用第二编程语言开发的应用进行通讯,其中,从调度接口继承的调用函数具有跨语言调用应用内方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;实现了跨语言的应用能够接入客户端,并与客户端进行通讯的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A是本发明一个实施例提供的客户端与应用的通讯方法的方法流程图;
图1B是本发明提供的一种客户端与应用之间进行跨语言通讯的架构;
图2是本发明另一实施例提供的客户端与应用的通讯方法的方法流程图;
图3A是本发明再一实施例提供的客户端与应用的通讯方法中所涉及的客户端侧的方法流程图;
图3B是本发明再一实施例提供的客户端与应用的通讯方法中所涉及的应用侧的方法流程图;
图4A是本发明还一实施例提供的客户端与应用的通讯方法中所涉及的客户端侧的方法流程图;
图4B是本发明还一实施例提供的客户端与应用的通讯方法中所涉及的应用侧的方法流程图;
图5是本发明一个实施例提供的客户端与应用的通讯装置的结构方框图;
图6是本发明另一实施例提供的客户端与应用的通讯装置的结构方框图;
图7是本发明再一实施例提供的客户端与应用的通讯装置的结构方框图;
图8是本发明还一实施例提供的客户端与应用的通讯装置的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
发明人发现,由JavaScript或者ActionScript开发出来的应用的娱乐性和交互性相比于DLL类型的应用更胜一筹。更重要的是,由于JavaScript和ActionScript之类的脚本语言句式简单,所以应用的开发周期很短,开发效率很高。因此,对于客户端来说,如果能够接入由JavaScript进行开发的Web(网页)类型的应用,或者能够接入由ActionScript进行开发的Flash(动画)类型的应用,将充分满足客户端用户的各式需求。然而,由于在通常情况下客户端是由C++进行开发的,如何实现C++与JavaScript之间,以及C++与ActionScript之间的通讯,排除不同编程语言之间的通讯障碍,进而使得客户端能够调用Web类型的应用以及Flash类型的应用内部的方法将是一大难点。下面,将结合具体的实施例对本发明提供的一种跨语言的应用与客户端之间的通讯方案进行详细介绍和说明。
请参考图1A,其示出了本发明一个实施例提供的客户端与应用的通讯方法的方法流程图,该客户端与应用的通讯方法用于采用第一编程语言开发的客户端中,且客户端用于与采用第二编程语言开发的应用进行通讯。该客户端与应用的通讯方法可以包括如下几个步骤:
步骤102,将采用第二编程语言开发的应用封装于组件对象模型COM中。
客户端采用第一编程语言开发,该第一编程语言可以是C++,也可以是C语言。由于C++是在C语言的基础上进行的进一步扩充和完善,两者在很多方面都是兼容的,所以在本发明各个实施例中仅以第一编程语言为C++来举例说 明。在本发明各个实施例中,假设客户端为团队语音工具客户端。
应用是由第三方开发者进行开发的应用,其通过客户端提供的多个开放形式的API接口接入客户端。换句话说,应用是跨平台接入客户端的。
应用采用第二编程语言开发,该第二编程语言可以是JavaScript,也可以是ActionScript,当然还可以是与第一编程语言相同的C++。
预先将采用第二编程语言开发的应用封装于COM(Component Object Model,组件对象模型)中。采用同一种编程语言开发的应用封装于同一个COM中。比如,将至少一个采用ActionScript开发的Flash(动画)类型的应用封装于一个Flash COM中,而将至少一个采用JavaScript开发的Web(网页)类型的应用封装于一个IE(Internet Explorer,网页浏览器)COM中。
步骤104,通过组件对象模型COM的调度接口与采用第二编程语言开发的应用进行通讯,从调度接口继承的调用函数具有跨语言调用应用内方法的功能。
客户端通过组件对象模型COM的调度接口与采用第二编程语言开发的应用进行通讯。IDispatch接口也称为调度接口,从IDispatch接口继承的Invoke(调用)函数具有跨语言调用应用内方法的功能。
请结合参考图1B,图1B示出了本发明提供的一种客户端与应用之间进行跨语言通讯的架构。采用C++开发的客户端通过从IDispatch接口继承的Invoke函数即可调用采用JavaScript开发的应用内的方法,和/或,调用采用ActionScript开发的应用内的方法。
综上所述,本实施例提供的客户端与应用的通讯方法,采用第一编程语言开发的客户端通过将采用第二编程语言开发的应用封装于COM中,并通过从COM的调度接口继承的调用函数实现了跨语言调用应用内方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
请参考图2,其示出了本发明另一实施例提供的客户端与应用的通讯方法的方法流程图,该客户端与应用的通讯方法用于采用第二编程语言开发的应用中,且该应用用于与采用第一编程语言开发的客户端进行通讯。该客户端与应用的 通讯方法可以包括如下几个步骤:
步骤202,预先封装于采用第一编程语言开发的客户端的组件对象模型COM中。
采用第二编程语言开发的应用预先封装于采用第一编程语言开发的客户端的组件对象模型COM中。本步骤和图1A所示实施例中的步骤102类似,具体参见图1A所示实施例中的步骤102,本实施例中不再赘述。
步骤204,通过组件对象模型COM的调度接口与采用第一编程语言开发的客户端进行通讯,从调度接口继承的调用函数具有跨语言调用客户端内方法的功能。
采用第二编程语言开发的应用通过COM的IDispatch接口与采用第一编程语言开发的客户端进行通讯。其中,从IDispatch接口继承的Invoke函数具有跨语言调用客户端内方法的功能。结合参考图1B,由于IDispatch接口连接了客户端与应用,且该IDispatch接口是双向的,因而采用第二编程语言开发的应用也能够通过从IDispatch接口继承的Invoke函数跨语言调用采用第一编程语言开发的客户端内的方法。
综上所述,本实施例提供的客户端与应用的通讯方法,采用第二编程语言开发的应用通过从组件对象模型COM的调度接口继承的调用函数实现了跨语言调用采用第一编程语言开发的客户端内的方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
下面,将结合两个具体的实施例介绍当第一编程语言为C++且第二编程语言为JavaScript时,如何实现客户端与应用的通讯;以及当第一编程语言为C++且第二编程语言为ActionScript时,如何实现客户端与应用的通讯。
请参考图3A和图3B,其示出了本发明再一实施例提供的客户端与应用的通讯方法,该客户端与应用的通讯方法用于实现采用C++开发的客户端与采用JavaScript开发的应用之间的通讯。该客户端与应用的通讯方法可以包括如下几个步骤:
步骤301,将采用JavaScript开发的应用封装于组件对象模型COM中。
采用C++开发的客户端预先将采用JavaScript开发的应用封装于组件对象模型COM中。为了实现不同应用间的代码重用,节约系统资源,可以将多个采用JavaScript开发的应用封装于一个COM中。
在本实施例中,以客户端为团队语音工具客户端为例。
步骤302,通过预设浏览器控件创建COM对象。
采用C++开发的客户端通过预设浏览器控件创建COM对象。预设浏览器控件是研发人员预先在客户端中插入的,其可以看作是一个类,通过该类创建一个COM对象。
在本实施例中,假设预设浏览器控件为YYWebBrowser控件,团队语音工具客户端通过YYWebBrowser控件创建一个COM对象,该COM对象为IWebBrowser2对象。
步骤303,通过COM对象获取IHTMLDocument2接口的Script对象。
采用C++开发的客户端通过COM对象获取IHTMLDocument2接口的Script对象。IHTMLDocument2接口是用于解析HTML(Hypertext Markup Language,超文本标记语言)的基础接口,一个网页对应于一个HTML文件。COM对象能够通过IHTMLDocument2接口获取网页元素的对象,包括Document(文档)对象和Script(脚本)对象等。由于应用为采用JavaScript开发的Web类型的应用,而JavaScript为脚本语言,所以客户端通过COM对象获取IHTMLDocument2接口的Script对象。
在本实施例中,IWebBrowser2对象获取IHTMLDocument2接口的Script对象。
步骤304,将Script对象作为调度接口的对象。
在上述步骤303中获取的Script对象即为调度接口的对象,简称为IDispatch对象。采用C++开发的客户端将Script对象作为IDispatch对象。
步骤305,通过调度接口的对象调用分发号获取函数。
采用C++开发的客户端通过IDispatch对象调用分发号获取函数GetIDsOfName函数。
步骤306,对于采用JavaScript开发的应用内的每一个方法,通过分发号获取函数获取与方法对应的分发号。
GetIDsOfName函数是从IDispatch接口继承的,其作用在于根据方法名称查询该方法名称所对应的方法的dispID(分发号)。因此,对于采用JavaScript开发的应用内的每一个方法,客户端通过GetIDsOfName函数能够获取与方法对应的dispID。
步骤307,通过从调度接口继承的调用函数根据获取到的分发号调用应用中与分发号对应的方法。
采用C++开发的客户端得到应用内的方法对应的dispID之后,通过从IDispatch接口继承的Invoke函数根据dispID调用应用中与分发号对应的方法。通过Invoke函数能够调用采用JavaScript开发的应用内的方法,执行JavaScript脚本,从而实现客户端到应用的通讯。
经过上述步骤301至步骤307实现了从C++到JavaScript的调用。请结合参考图3B,下述步骤311至步骤321将具体介绍如何实现从JavaScript到C++的调用。
步骤311,预先封装于采用C++开发的客户端的组件对象模型COM中。
采用JavaScript开发的应用预先封装于采用C++开发的客户端的组件对象模型COM中。
步骤312,通过预设浏览器控件创建客户端站台对象。
首先,通过预设浏览器控件创建客户端站台对象。在本实施例中,通过YYWebBrowser控件创建YYClientSite对象。
步骤313,通过客户端站台对象创建IDocHostUIHandler接口。
然后,通过客户端站台对象创建IDocHostUIHandler接口。为了后续实现从JavaScript到C++调用,需要实现一个IDocHostUIHandler接口,该IDocHostUIHandler接口用于根据触发信号触发window.external函数调用GetEeternal函数。
上述步骤311至步骤313为实现从JavaScript到C++调用的前提条件。
步骤314,接收用于调用客户端内的方法的触发信号。
采用JavaScript开发的应用接收用于调用客户端内的方法的触发信号。当用户在Web类型的应用中点击某一按钮或者链接时,会产生一个触发信号。其中,在部分情况下该触发信号所需实现的功能需要调用到客户端内的方法。比如,应用需要客户端提供一些用户账号的数据完成用户的登录。
步骤315,根据触发信号触发window.external函数调用GetEeternal函数。
采用JavaScript开发的应用接收到用于调用客户端内的方法的触发信号之后,根据触发信号触发window.external函数调用GetEeternal函数。
步骤316,通过GetEeternal函数返回的参数作为调度接口的指针。
采用JavaScript开发的应用通过GetEeternal函数返回的参数作为调度接口的指针。GetEeternal函数被调用之后,将会返回一个参数ppDispatch,该返回的参数ppDispatch即为IDispatch接口的指针。
步骤317,根据返回的调度接口的指针获取外部网页浏览器对象。
采用JavaScript开发的应用根据返回的调度接口的指针获取外部网页浏览器对象。在本实施例中,返回的IDispatch接口的指针指向一个YYWebBrowserExternal对象,该YYWebBrowserExternal对象即为IDispatch接口的对象。
步骤318,将外部网页浏览器对象作为调度接口的对象。
采用JavaScript开发的应用将外部网页浏览器对象作为调度接口的对象。在本实施例中,采用JavaScript开发的应用将YYWebBrowserExternal对象作为IDispatch接口的对象。
步骤319,通过调度接口的对象调用分发号获取函数。
采用JavaScript开发的应用通过IDispatch对象调用分发号获取函数GetIDsOfName函数。
步骤320,对于采用C++开发的客户端内的每一个方法,通过分发号获取函数获取与方法对应的分发号。
GetIDsOfName函数是从IDispatch接口继承的,其作用在于根据方法名称查询该方法名称所对应的方法的dispID(分发号)。因此,对于采用C++开发的客户端内的每一个方法,采用JavaScript开发的应用通过GetIDsOfName函数能够获取与方法对应的dispID。
步骤321,通过从调度接口继承的调用函数根据获取到的分发号调用客户端中与分发号对应的方法。
采用JavaScript开发的应用得到客户端内的方法对应的dispID之后,通过从IDispatch接口继承的Invoke函数根据dispID调用客户端中与分发号对应的方法。通过Invoke函数能够调用采用C++开发的客户端内的方法,执行C++程序, 从而实现应用到客户端的通讯。
综上所述,本实施例提供的客户端与应用的通讯方法,实现了从C++到JavaScript的调用以及从JavaScript到C++的调用;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
请参考图4A和图4B,其示出了本发明还一实施例提供的客户端与应用的通讯方法,该客户端与应用的通讯方法用于实现采用C++开发的客户端与采用ActionScript开发的应用之间的通讯。该客户端与应用的通讯方法可以包括如下几个步骤:
步骤401,将采用ActionScript开发的应用封装于组件对象模型COM中。
采用C++开发的客户端预先将采用ActionScript开发的应用封装于组件对象模型COM中。为了实现不同应用间的代码重用,节约系统资源,可以将多个采用ActionScript开发的应用封装于一个COM中。在本实施例中,仍然以客户端为团队语音工具客户端为例。
步骤402,通过预设动画控件创建COM对象。
采用C++开发的客户端通过预设动画控件创建COM对象。预设动画控件是研发人员预先在客户端中插入的,其可以看作是一个类,通过该类创建一个COM对象。在本实施例中,假设预设动画控件为Flash控件,团队语音工具客户端通过Flash控件创建一个COM对象。
步骤403,将COM对象作为调度接口的对象。
在上述步骤402中创建的COM对象即为调度接口的对象,简称为IDispatch对象。采用C++开发的客户端将COM对象作为IDispatch对象。
步骤404,通过调度接口的对象调用分发号获取函数。
步骤405,对于采用ActionScript开发的应用内的每一个方法,通过分发号获取函数获取与方法对应的分发号。
步骤406,通过从调度接口继承的调用函数根据获取到的分发号调用应用中与分发号对应的方法。
上述步骤404至步骤406与图3A所示实施例中的步骤305至步骤307相同 或者相似,具体参见图3A所示实施例中的步骤305至步骤307,本实施例中不再赘述。
经过上述步骤401至步骤406实现了从C++到ActionScript的调用。请结合参考图4B,下述步骤411至步骤421将具体介绍如何实现从ActionScript到C++的调用。
步骤411,预先封装于所述采用C++开发的客户端的组件对象模型COM中。
采用ActionScript开发的应用预先封装于采用C++开发的客户端的组件对象模型COM中。
步骤412,接收用于调用客户端内的方法的触发请求。
采用ActionScript开发的应用接收用于调用客户端内的方法的触发请求。当用户在Flash类型的应用中点击某一按钮或者链接时,会产生一个触发请求。其中,在部分情况下该触发请求所需实现的功能需要调用到客户端内的方法。比如,应用需要客户端提供一些用户账号的数据完成用户的登录。
步骤413,根据触发请求触发接收器对象调用组件对象模型COM中的QueryInterface函数。
采用ActionScript开发的应用接收到用于调用客户端内的方法的触发请求之后,根据触发请求触发接收器对象调用组件对象模型COM中的QueryInterface函数。
步骤414,通过QueryInterface函数检测IConnectionPointContainer接口是否可用。
采用ActionScript开发的应用通过QueryInterface函数检测IConnectionPointContainer接口是否可用。IConnectionPointContainer接口称为连接点容器接口,该接口用于管理多个连接点对象。
步骤415,若检测结果为可用,则通过QueryInterface函数向应用返回指针。
当检测结果为可用时,采用ActionScript开发的应用通过QueryInterface函数向自身返回指针,该指针用于得到IConnectionPointContainer接口中的连接点对象,也即该指针指向IConnectionPointContainer接口中的一个连接点对象。
步骤416,在接收到指针之后,根据指针指向的连接点对象建立应用与连接点对象之间的连接。
在接收到指针之后,采用ActionScript开发的应用根据指针指向的连接点对 象建立自身与连接点对象之间的连接。建立上述连接之后,当连接点对象向接收器对象发送请求时,接收器对象就会被调用。
步骤417,通过连接点对象调用接收器对象。
采用ActionScript开发的应用通过连接点对象调用接收器对象。
步骤418,将接收器对象作为调度接口的对象。
采用ActionScript开发的应用将接收器对象作为IDispatch对象。
步骤419,通过调度接口的对象调用分发号获取函数。
步骤420,对于采用C++开发的客户端内的每一个方法,通过分发号获取函数获取与方法对应的分发号。
步骤421,通过从调度接口继承的调用函数根据获取到的分发号调用客户端中与分发号对应的方法。
上述步骤419至步骤421与图3B所示实施例中的步骤319至步骤321相同或者相似,具体参见图3B所示实施例中的步骤319至步骤321,本实施例中不再赘述。
需要说明的是,结合上述图3A、图3B、图4A以及图4B所示实施例可知,客户端需要提供至少两个接口,一个接口为用于支持采用JavaScript开发的Web类型的应用的接口,另一个接口为用于支持采用ActionScript开发的Flash类型的应用的接口。然而,如果预先在Web类型的应用内嵌入动画项目模块SWFObject模块,通过该SWFObject模块将动画文件加载在Web类型的应用中展示,即可实现客户端只需提供一个用于支持采用JavaScript开发的Web类型的应用的接口就能够同时展示网页和动画两种内容。
综上所述,本实施例提供的客户端与应用的通讯方法,实现了从C++到ActionScript的调用以及从ActionScript到C++的调用;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。另外,通过在Web类型的应用内嵌入SWFObject模块,该模块用于将动画文件加载在Web类型的应用中展示,实现了客户端只需提供一个用于支持采用JavaScript开发的Web类型的应用的接口就能够同时展示网页和动画两种内容。
通过本发明实施例提供的客户端与应用的通讯方法,客户端在基于向第三 方开发者提供原生C++接口的基础上,实现了向第三方开发者提供JavaScript接口和ActionScript接口,使得第三方开发者不再局限于应用开发的语言,开发者可以根据自己的语言强项来选择自己擅长的语言开发更为优质的应用,最大限度地满足客户端用户的需求。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图5,其示出了本发明一个实施例提供的客户端与应用的通讯装置的结构方框图,该客户端与应用的通讯装置用于采用第一编程语言开发的客户端中,客户端用于与采用第二编程语言开发的应用进行通讯。该客户端与应用的通讯装置可以通过软件、硬件或者两者的结合实现成为客户端的部分或者全部。该客户端与应用的通讯装置包括:应用封装模块510和应用通讯模块520。
应用封装模块510,用于将所述采用第二编程语言开发的应用封装于组件对象模型COM中。
应用通讯模块520,用于通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。
综上所述,本实施例提供的客户端与应用的通讯装置,采用第一编程语言开发的客户端通过将采用第二编程语言开发的应用封装于COM中,并通过从COM的调度接口继承的调用函数实现了跨语言调用应用内方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
请参考图6,其示出了本发明另一实施例提供的客户端与应用的通讯装置的结构方框图,该客户端与应用的通讯装置用于采用第一编程语言开发的客户端中,客户端用于与采用第二编程语言开发的应用进行通讯。该客户端与应用的通讯装置可以通过软件、硬件或者两者的结合实现成为客户端的部分或者全部。该客户端与应用的通讯装置包括:应用封装模块510、第一组件创建模块511、 脚本对象获取模块512、脚本对象运用模块513、第二组件创建模块516、组件对象运用模块517和应用通讯模块520。
应用封装模块510,用于将所述采用第二编程语言开发的应用封装于组件对象模型COM中。
应用通讯模块520,用于通过所述组件对象模型COM的调度接口与所述采用第二编程语言开发的应用进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述应用内方法的功能。
具体来讲,所述应用通讯模块520,包括:函数调用单元520a、分发号获取单元520b和方法调用单元520c。
所述函数调用单元520a,用于通过所述调度接口的对象调用分发号获取函数。
所述分发号获取单元520b,用于对于所述采用第二编程语言开发的应用内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号。
所述方法调用单元520c,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述应用中与所述分发号对应的方法。
在第一种可能的实现方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:第一组件创建模块511、脚本对象获取模块512和脚本对象运用模块513。
第一组件创建模块511,用于通过预设浏览器控件创建COM对象。
脚本对象获取模块512,用于通过所述COM对象获取IHTMLDocument2接口的Script对象。
脚本对象运用模块513,用于将所述Script对象作为所述调度接口的对象。
特别地,在所述采用第二编程语言开发的应用为web类型的应用时,所述装置,还包括:动画嵌入模块和动画加载模块。
动画嵌入模块,用于预先在所述Web类型的应用内嵌入动画项目模块。
动画加载模块,用于通过所述动画项目模块将动画文件加载在所述Web类型的应用中展示。
在第二种可能的实现方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:第二组件创建模块516和组件对象运用模块517。
第二组件创建模块516,用于通过预设动画控件创建COM对象。
组件对象运用模块517,用于将所述COM对象作为所述调度接口的对象。
综上所述,本实施例提供的客户端与应用的通讯装置,采用第一编程语言开发的客户端通过将采用第二编程语言开发的应用封装于COM中,并通过从COM的调度接口继承的调用函数实现了跨语言调用应用内方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
另外,通过在Web类型的应用内嵌入SWFObject模块,该模块用于将动画文件加载在Web类型的应用中展示,实现了客户端只需提供一个用于支持采用JavaScript开发的Web类型的应用的接口就能够同时展示网页和动画两种内容。
通过本发明实施例提供的客户端与应用的通讯装置,客户端在基于向第三方开发者提供原生C++接口的基础上,实现了向第三方开发者提供JavaScript接口和ActionScript接口,使得第三方开发者不再局限于应用开发的语言,开发者可以根据自己的语言强项来选择自己擅长的语言开发更为优质的应用,最大限度地满足客户端用户的需求。
请参考图7,其示出了本发明再一实施例提供的客户端与应用的通讯装置的结构方框图,该客户端与应用的通讯装置用于采用第二编程语言开发的应用中,应用用于与采用第一编程语言开发的客户端进行通讯。该客户端与应用的通讯装置可以通过软件、硬件或者两者的结合实现成为应用的部分或者全部。该客户端与应用的通讯装置包括:预先封装模块710和客户端通讯模块720。
预先封装模块710,用于预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中。
客户端通讯模块720,用于通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。
综上所述,本实施例提供的客户端与应用的通讯方法,采用第二编程语言开发的应用通过从组件对象模型COM的调度接口继承的调用函数实现了跨语 言调用采用第一编程语言开发的客户端内的方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
请参考图8,其示出了本发明还一实施例提供的客户端与应用的通讯装置的结构方框图,该客户端与应用的通讯装置用于采用第二编程语言开发的应用中,应用用于与采用第一编程语言开发的客户端进行通讯。该客户端与应用的通讯装置可以通过软件、硬件或者两者的结合实现成为应用的部分或者全部。该客户端与应用的通讯装置包括:预先封装模块710、站台对象创建模块711、接口创建模块712、信号接收模块713、函数触发模块714、指针返回模块715、对象获得模块716、对象转换模块717、客户端通讯模块720、请求接收模块721、对象触发模块722、接口检测模块723、返回指针模块724、连接建立模块725、对象调用模块726和对象转化模块727。
预先封装模块710,用于预先封装于所述采用第一编程语言开发的客户端的组件对象模型COM中。
客户端通讯模块720,用于通过所述组件对象模型COM的调度接口与所述采用第一编程语言开发的客户端进行通讯,从所述调度接口继承的调用函数具有跨语言调用所述客户端内方法的功能。
具体来讲,所述客户端通讯模块720,包括:调用函数单元720a、分发号取得单元720b和调用方法单元720c。
所述调用函数单元720a,用于通过所述调度接口的对象调用分发号获取函数。
所述分发号取得单元720b,用于对于所述采用第一编程语言开发的客户端内的每一个方法,通过所述分发号获取函数获取与所述方法对应的分发号。
所述调用方法单元720c,用于通过从所述调度接口继承的调用函数根据获取到的所述分发号调用所述客户端中与所述分发号对应的方法。
在第一种可能的实现方式中,在所述第一编程语言为C++且所述第二编程语言为JavaScript时,所述装置,还包括:站台对象创建模块711、接口创建模 块712、信号接收模块713、函数触发模块714、指针返回模块715、对象获得模块716和对象转换模块717。
站台对象创建模块711,用于通过预设浏览器控件创建客户端站台对象。
接口创建模块712,用于通过所述客户端站台对象创建IDocHostUIHandler接口,所述IDocHostUIHandler接口用于根据所述触发信号触发window.external函数调用GetEeternal函数。
信号接收模块713,用于接收用于调用所述客户端内的方法的触发信号。
函数触发模块714,用于根据所述触发信号触发window.external函数调用GetEeternal函数。
指针返回模块715,用于通过所述GetEeternal函数返回的参数作为所述调度接口的指针。
对象获得模块716,用于根据返回的所述调度接口的指针获取外部网页浏览器对象。
对象转换模块717,用于将所述外部网页浏览器对象作为所述调度接口的对象。
在第二种可能的实现方式中,在所述第一编程语言为C++且所述第二编程语言为ActionScript时,所述装置,还包括:请求接收模块721、对象触发模块722、接口检测模块723、返回指针模块724、连接建立模块725、对象调用模块726和对象转化模块727。
请求接收模块721,用于接收用于调用所述客户端内的方法的触发请求。
对象触发模块722,用于根据所述触发请求触发接收器对象调用所述组件对象模型COM中的QueryInterface函数。
接口检测模块723,用于通过所述QueryInterface函数检测IConnectionPointContainer接口是否可用。
返回指针模块724,用于若检测结果为可用,则通过所述QueryInterface函数向所述应用返回指针,所述指针用于得到所述IConnectionPointContainer接口中的连接点对象。
连接建立模块725,用于在接收到所述指针之后,根据所述指针指向的所述连接点对象建立所述应用与所述连接点对象之间的连接。
对象调用模块726,用于通过所述连接点对象调用所述接收器对象。
对象转化模块727,用于将所述接收器对象作为所述调度接口的对象。
综上所述,本实施例提供的客户端与应用的通讯装置,采用第二编程语言开发的应用通过从组件对象模型COM的调度接口继承的调用函数实现了跨语言调用采用第一编程语言开发的客户端内的方法的功能;解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用ActionScript语言开发的动画类应用接入客户端的问题;丰富了客户端跨平台接入的应用的类型,且排除了不同编程语言之间的限制。
需要说明的是:上述实施例提供的客户端与应用的通讯装置在实现客户端与应用之间的通讯时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将客户端或者应用的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的客户端与应用的通讯装置与客户端与应用的通讯方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

客户端与应用的通讯方法及装置.pdf_第1页
第1页 / 共28页
客户端与应用的通讯方法及装置.pdf_第2页
第2页 / 共28页
客户端与应用的通讯方法及装置.pdf_第3页
第3页 / 共28页
点击查看更多>>
资源描述

《客户端与应用的通讯方法及装置.pdf》由会员分享,可在线阅读,更多相关《客户端与应用的通讯方法及装置.pdf(28页珍藏版)》请在专利查询网上搜索。

本发明公开了一种客户端与应用的通讯方法及装置,属于计算机技术领域。所述方法包括:将采用第二编程语言开发的应用封装于组件对象模型COM中;通过组件对象模型COM的调度接口与采用第二编程语言开发的应用进行通讯,从调度接口继承的调用函数具有跨语言调用应用内方法的功能。本发明解决了背景技术中只能够支持单纯的DLL类型的应用接入客户端,而无法支持采用JavaScript语言开发的网页类应用或采用Action。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1