我有一个通过 JNI 访问的 native 函数,它需要将数组的内容返回给 java。我的函数原型(prototype)如下:
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 的链接上找到了正确的 JNI 函数 - SetCharArrayRegion()。
仅供引用 - “Java native 接口(interface) - 程序员指南和规范”给出了使用它们的函数的错误示例。
即
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
不编译。相反,正确的语法是:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);
最佳答案
参见 JNI documentation on array operations . GetCharArrayRegion
的对应项是 SetCharArrayRegion
。
jchar 是一个短字符,而不是一个字符。 Java 支持 Unicode 字符。如果你想要一个字节数组,你可以使用 jbytearray。
另一种方法是使用 JNI string operations .
关于java - 如何在 JNI 中返回一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7677723/