欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-12 19:35:25
...

参考资料:
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的子类,所以参数类型兼容)

相关标签: JNI