我使用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方法。有人知道如何做吗?
更新:
我在安迪的链接上找到了正确的JNI函数-SetCharArrayRegion()。
值得注意的是,“Java本地接口-程序员指南和规范”在使用它们的函数的示例中给出了不正确的示例。
即:
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
无法编译。正确的语法应该是:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);