java如何在JNI中返回数组?
我有一个通过JNI访问的本机函数,需要将数组的内容返回给java。我的功能原型如下:
JNIEXPORT jcharArray JNICALL Java_jniusb_Main_receiveData
(JNIEnv *, jclass, jchar);
它是用javah生成的。exe
因此,在函数的代码中,我有一个数组“unsigned char InputPacketBuffer[65]”,我想将其返回到java。但是,将其映射到返回类型“jcharArray”时遇到问题
在另一个函数中,我使用JNI提供的“GetCharArrayRegion”方法将“jcharArray”类型的输入参数转换为“jchar”数组,然后可以将该数组类型转换为“unsigned char”数组。基本上,我需要做与此相反的事情来转换到另一个方向,但是我还没有在JNI规范pdf中找到合适的JNI方法。有人知道怎么做吗
更新:
我在andy的link-SetCharArrayRegion()上找到了正确的JNI函数
仅供参考-“Java本机接口-程序员指南和规范”给出了使用其函数的错误示例
即
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
不编译。相反,正确的语法是:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);
# 1 楼答案
见JNI documentation on array operations。与
GetCharArrayRegion
相对应的是SetCharArrayRegion
jchar是短字符,不是字符。Java支持Unicode字符。如果需要字节数组,可以使用jbytearray
另一种方法是使用JNI string operations