Android平台下C++和Java通信的方法及系统的制作方法_2

文档序号:9524069阅读:来源:国知局
间传递的消息的识别,所述C++和Java之间传送的消息所包含的消息接收对象名称参数中带有用于对方识别的特定字段。例如,C++发送到Java的消息,其消息接收对象名称参数中带有“C++”字段,而Java发送到C++的消息,其消息接收对象名称参数中带有“ Java ”字段。
[0025]具体地,所述C++的C消息管理类提供下面几个功能函数:
1、所述C++的C消息管理类中设置有一包括本部分所有注册的消息接收对象的集合,将注册的消息接收对象置于一个统一的集合中,若注册的消息接收对象的名字有重复,则进行报错。
[0026]2、根据函数参数中消息接收对象名称参数,在C消息管理类集合中用C消息监听器接口,遍历集合中的消息接收对象的名字,直到找到消息实际接收对象,再将消息用C消息监听器接口发给指定的消息接收对象,并利用C消息监听器接口将返回值返回。
[0027]3、遍历C消息管理类集合中所有的消息接收对象,将消息发送给所有的消息接收对象。
[0028]类似的,所述Java的J消息管理类也提供C++的C消息管理类类似的功能函:
1、将Java中注册的消息接收对象置于一个统一的集合中,如果注册的消息接收对象的名字有重复,则报错。
[0029]2、根据Java的J消息监听器接口获取的消息接收对象名称参数,在J消息管理类集合中找到消息接收对象,再将消息用J消息监听器接口发给指定的消息接收对象。并利用J消息监听器接口将返回值返回。
[0030]3、当检索到的消息接收对象名称参数中包含特定字段,则认为接收方为C++部分的接收对象。则调用Java本地接口。
[0031]4、遍历Java的J消息管理类中所有的消息接收对象,并将消息发送给所有的消息接收对象。
[0032]所述Java本地接口中包含用于转换Java发送到C++消息格式的中介函数。该中介函数是根据Android平台提供的Java本地调用技术所创建的供Java调用一个C函数,其提供Java发消息到C++消息管理者的功能,并能将处理结果返回给Java。
[0033]类似的,所述Java本地接口中还包含的用于转换C++发送到Java消息格式的中介函数,其也是根据Android平台提供的Java本地调用技术所设置的一个C函数,实现在C++部分通过Java本地接口调用Java部分的程序,供C++部分发消息给Java部分。
[0034]根据如上描述,所述步骤S100具体为:
A1、C++和Java其中的发送方的消息管理类通过消息监听器接口收到实际发送对象发送来的消息并获取其中消息接收对象名称参数,利用所获取的消息接收对象名称参数在发送方消息管理类集合中查找该消息的实际接收对象,若未查找到,则进一步检索该消息接收对象名称参数中是否带有对应接收方的特定字段,若检测到该特定字段,说明该消息的接收对象不在发送方部分,而属于接收方部分,则将该消息发送至Java本地接口进行转发。
[0035]当发送方利用所获取的消息接收对象名称参数在发送方消息管理类集合中查找到该消息的实际接收对象时,说明消息实际接收对象在发送方部分,无需进行Java和C++间的通信,则将消息通过消息监听器接口发送给检索到的实际接收对象,并在之后将该实际接收对象对消息的处理结果作为返回值返回到实际发送对象。
[0036]A2、Java本地接口接收发送方发送的消息后,调用相应的中介函数对消息进行转换封装形成发送方的消息格式。
[0037]S200.C++和Java中另外一方作为接收方利用其预先创建消息监听器接口获取该消息,并通过其消息管理类查找该消息的实际接收对象,之后将消息发送给查找到的实际接收对象。
[0038]进一步地,所述步骤S200具体为:
B1、C++和Java其中的接收方通过其消息监听器接口接收Java本地接口发送的消息并获取该消息的消息接收对象名称参数。
[0039]B2、利用所获取的消息接收对象名称参数在接收方的消息管理类集合中查找该消息的实际接收对象,将消息发送给所查找到实际接收对象。
[0040]当利用消息接收对象名称参数在接收方的消息管理类集合中未查找接收对象时,则将该查找结果作为返回值返回到发送方的实际发送对象。
[0041]S300、接收方的消息管理类将实际接收对象对消息的处理结果通过Java本地接口转换类型后返回至发送方。
[0042]进一步地,所述步骤S300具体为:
C1、实际接收对象对消息进行处理形成处理结果,将该处理结果作为返回值发送至Java本地接口。
[0043]C2、Java本地接口调用相应的中介函数对返回值进行转换封装形成发送方的返回值数据类型,将转换后的返回值返回至发送方并由实际发送对象接收。
[0044]如图2所示,Java发消息给C++的活动过程具体步骤为:
由Java发消息的部分(实际发送对象)开始发送消息。之后消息由消息管理类进行处理。
[0045]S1、收到消息。J消息管理类收到实际发送者发送的消息。利用J消息监听器接口获取该消息的接收对象的名称。
[0046]S2、查找消息接收对象。在J消息管理类的集合中查找消息的实际接收对象。
[0047]S3、是否查找到消息接收对象。若是,则执行步骤S4,若否,则执行步骤S5。
[0048]S4、发送消息给指定对象。即J消息管理类将消息通过J消息监听器接口发送给Java部分的实际接收对象,流程结束。
[0049]S5、是否是发送C++的消息。若是,则执行步骤S6,若否,则结束流程。
[0050]S6、收到Java发来的消息。、Java本地接口函数收到Java的消息管理类发来的消肩、Ο
[0051]S7、消息封装转换。Java本地接口函数对Java发送来的消息格式转换为C++部分的消息格式。
[0052]S8、收到消息。C++的C消息管理类收到Java本地接口函数转发的消息。
[0053]S9、查找接收对象。C++的C消息管理类在C++部分的集合中查找与该消息接收对象名称参数对应的接收对象。
[0054]S10、是否查找到接收对象。若否,则执行步骤S12,若是,则执行步骤S11。
[0055]S11、发送消息给指定对象,通过C消息监听器接口将消息发送给所查找到的接收对象。由接收对象对消息进行处理后形成处理结果,之后执行步骤S12。
[0056]S12、收到返回值。Java本地接口函数收到C++的C消息管理类发送的返回值。该返回值可能是由查找到的接收对象返回的处理结果,也可能返回的是未查找到接收对象的结果。
[0057]S13、封装返回值数据类型。将C++的返回值进行类型转换,转换为Java的数据类型。
[0058]S14、收到返回值。返回值由Java本地接口函数转发,由Java的J消息管理类通过J消息监听器接口接收到该返回值。
[0059]S15、收到返回值。Java的J消息管理类将该返回值发送到消息实际发送对象。整个活动流程结束。
[0060]如图3所示,C++发消息给Java的活动过程具体步骤为:
由C++发消息的部分(实际发送对象)开始发送消息。之后消息由消息管理类进行处理。
[0061]H1、收到消息。C++的C消息管理类收到实际发送对象发送的消息。利用C消息监听器接口获取该消息的接收对象的名称。
[0062]H2、查找消息接收对象。在C++的C消息管理类的集合中查找消息的实际接收对象。
[0063]H3、是否查找到消息接收对象。若是,则执行步骤H4,若否,则流程结束。
[0064]H4、发送消息给指定对象。
[0065]H5、是否是发送Java的消息。若否,则执行步骤H6,若是,则执行步骤H8。
[0066]H6、C++监听器处理消息。由C++的监听器根据上一步判断结果接收该消息并对该消息进行处理。
[0067]H7、返回。由C消息管理类将该消息返回至消息发送方。之后执行步骤S19。
[0068]H8、收到消息。由Java消息接收者类接收该消息,Java消息接收者类是在创建Java本地接口函数时所创建,其只接收C++发给Java的消息。在函数体中其作为C++的接口函数,起到调用Java本地
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1