上一篇文章告诉JNI中的简单调用Java函数。接下来,我们必须解决上次剩下的疑问回答,如何用结构调用Java功能。
假设:C ++想要通过Java一个称为Datast的结构,然后Android还需要定义相同的结构,保持与SO文件中的结构名称和字段相同的结构,否则不会查询。
结构的内容如下:
C ++传递的数据存储在:STD :: VEC ++ TOR M_VETARRAY中,它如何在Java中使用STL接收结构数据?
我接下来逐渐解释?
为了在Java代码中获取称为C ++调用的数据,此时,Java需要定义此类数据存储结构。
查询结构在Java中的定义的位置
请注意,目前,FindClass对应于定义Java结构的程序路径。您必须写全部,否则您将无法询问!
像C ++方法一样,如果要将数据存储到容器中,则需要定义一个容器。在这里,您需要清除容器的大小,即需要传递给Java数据的数据大小,类似于C ++的数组。
结构中有两种变量类型:字符串,int
获取ID方法ID
方法ID可以在vetindex中获取int值的方法
如果您不知道如何在这里获取它,则可以将Java结构自动生成的功能结合在一起。
为了让Java识别C ++的数据,我们需要更改类型。取决于数据流中的两种结构类型
假设:字符串ID =“ 123”;
注意:在JNI中,可以直接分配INT类型,无需特殊治疗
在这里,我们已经达到了存储的重点。以上内容是此步骤的路面。
在第二步中,我们假设C ++容器的大小为10,因此我们仍然使用10在这里处理10
int nsize = 10;
我们正在存储数据存储。我们被存储在顺序上。首先,我们必须定义一种招标方法。
存储数据时,您需要使用此method_init_event参数
例如,当数据插入C ++时,可以将向量用于推送_back方法,也可以使用插入方法。
下面,首先显示存储大框架
以上是一个粗略的分配过程。对于2个操作,让我们执行特定代码显示!
步骤1:字符串
步骤2:存储在objmodel对象中
数据已存储在第五步中的结构中,因此Java的功能实际上在此处调用。
假设此处调用的函数称为:recorddataandroidback(数组,bool类型)
代码分析:
当发生函数调用误差时,最容易发生的问题是Java函数参数的路径是错误的,或者格式不正确。90%是第三个参数中的问题。此外,有些问题会消失。让您发疯,现在让您找到它!交叉点
在这一点上,已经解释了如何使用结构容器调用Java功能,朋友可以尝试一下!
我是中国的好公民,C ++开发计划猿?
原始:https://juejin.cn/post/710236118811305752