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 的链接上找到了正确的 JNI 函数 - SetCharArrayRegion()。
fyi - “Java 本机接口 - 程序员指南和规范”给出了使用其函数的错误示例。
即
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
无法编译。相反,正确的语法是:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);
I have a native function I am accessing via JNI that needs to return the contents of an array to java. My function prototype is as follows:
JNIEXPORT jcharArray JNICALL Java_jniusb_Main_receiveData
(JNIEnv *, jclass, jchar);
which was generated with javah.exe.
So in the function's code I have an array 'unsigned char InputPacketBuffer[65]' which i want to return to java. However, I am having problems mapping this to my return type 'jcharArray'.
In another function I used the 'GetCharArrayRegion' method provided by JNI to convert an input parameter of type 'jcharArray' to a 'jchar' array which i could then typecast to an 'unsigned char' array. Basically, I need to do the opposite of this to convert in the other direction, but I haven't been able to find an appropriate JNI method in the JNI specification pdf. Anyone know how to do this?
UPDATE:
I found the correct JNI function on andy's link - SetCharArrayRegion().
fyi - the "The Java Native Interface - programmer's guide and specification" gives incorrect examples for using their functions.
i.e.
(*env)->SetCharArrayRegion(env, elemArr, 0, len, chars);
doesn't compile. Instead, the proper syntax is:
(*env).SetCharArrayRegion(elemArr, 0, len, chars);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请参阅有关数组操作的 JNI 文档。
GetCharArrayRegion
的对应项是SetCharArrayRegion
。jchar 是短字符,而不是字符。 Java 支持 Unicode 字符。如果你想要一个字节数组,你可以使用jbytearray。
另一种方法是使用 JNI 字符串操作< /a>.
See the JNI documentation on array operations. The counterpart to
GetCharArrayRegion
isSetCharArrayRegion
.A jchar is a short, not a char. Java supports Unicode characters. If you want an array of bytes, you can use jbytearray.
An alternative is to use JNI string operations.