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

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

我有一个通过 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/

相关文章:

java - Hibernate:删除前检查外键约束违规?

java - Thymeleaf 中的 Div 包装

java - 从 C 调用 Java 方法而不从 C 启动 JVM

c++ - 通过 C 中的偏移量调用函数

java - 如何从 char 数组的已知元素创建字符串

java - 根据字符串和模式拆分字符串 - 已更新

c++ - 使用 Microsoft 编译器生成 CMOV 指令

visual-c++ - 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

windows - 如何获取使用 BTNS_AUTOSIZE 样式创建的工具栏按钮的实际大小?

java - 安卓 :Export Android Project as jar