JNI中如何返回数组?

发布于 2024-12-09 01:47:58 字数 807 浏览 1 评论 0原文

我有一个通过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倥絔 2024-12-16 01:47:58

请参阅有关数组操作的 JNI 文档。 GetCharArrayRegion 的对应项是 SetCharArrayRegion

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

另一种方法是使用 JNI 字符串操作< /a>.

See the JNI documentation on array operations. The counterpart to GetCharArrayRegion is SetCharArrayRegion.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文