JNI本地函数返回结构体(结构体成员为数组的处理办法)

3 篇文章 0 订阅
1 篇文章 0 订阅

参考资料:
JNI官方中文资料.
JNI 返回结构体参数的方法.
JNI返回自定义结构体数组到Java.
C++代码中有一个结构体,想将其作为本地函数的返回值传递给JAVA,那么要写一个自定义的JAVA类,其成员和该结构体一一对应。(C++中的unsigned char*等单字节的类型,JAVA中可以写为byte[])(类型的对应要注意字节数相等)
接下来分几步在C++中构建JAVA对象作为返回值:(省略返回值、参数,函数的用法的细节详见参考资料)

1.获取定义好的类:

jclass FindClass()

2.获取该类的构造函数ID:

jmethodID GETMethodID()

3.新建类对象:(即为返回值)

jobject NewObject()

4.获取类的域的ID:(这里的域有时为一个jobject对象,如String对象,以及下文中说到的数组)

jfield GetFieldID()

5.设置对应ID的域的值:(设置为C++中结构体成员的值)

set<type>Field()

结构体成员为数组的处理办法

*JAVA数组实质是一个类对象
所以可以将数组作为一个jobject对象处理,注意两点:
1.GetFieldID()最后一个参数(类型签名)为:“[数组类型对应的签名”。(如int[]数组对应的签名为"[I”,byte[]数组对应的签名为"[B")
2.上文中的第5步用SetObjectField(),其最后一个参数(jobject对象)的类型为:j数组类型Array(它是jobject的子类,所以参数类型兼容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值