【发布时间】:2011-10-06 16:48:11
【问题描述】:
我有一个通过 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);
【问题讨论】:
-
示例对C代码是正确的,其中JNIEnv的typedef是JNI函数指针的结构。对于 C++ 方法调用,只需省略记录的 JNI 函数的第一个参数。
标签: java visual-c++ java-native-interface