如何在JNI中返回一个数组?

时间:2011-10-06 16:48:12

标签: java visual-c++ java-native-interface

我有一个本机函数,我通过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的链接上找到了正确的JNI函数--SetCharArrayRegion()。

fyi - “Java Native Interface - 程序员指南和规范”给出了使用其函数的错误示例。

即。

(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars); 

无法编译。相反,正确的语法是:

(*env).SetCharArrayRegion(elemArr, 0, len, chars);

1 个答案:

答案 0 :(得分:4)

请参阅JNI documentation on array operationsGetCharArrayRegion的对应方为SetCharArrayRegion

jchar是一个短片,而不是一个char。 Java支持Unicode字符。如果你想要一个字节数组,你可以使用jbytearray。

另一种方法是使用JNI string operations