使用JNI从C ++返回列表<unsigned char * =“”>

时间:2015-10-12 06:51:16

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

我有以下JNI方法,

JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer
(JNIEnv *env, jobject obj, jbyteArray inBufferData)

我创建了一个unsigned char*列表,并使用从我的C ++代码中的inBufferData中提取的一些数据填充它

list<unsigned char*> returnBuffer

我想将returnBuffer返回到我的Java代码,它将是一个字节数组列表List<byte[]>

请告诉我如何通过jobject通过JNI传递unsigned char *列表,然后用Java进行进一步处理。

1 个答案:

答案 0 :(得分:1)

您将无法直接执行此操作。您必须在C ++中实例化所需Java列表实现的实例(因为jobject是一个接口),将其放在jbytearray中,然后从列表中添加jclass arrayListClass = env->FindClass("java/util/ArrayList"); // Find ArrayList class jmethodID constructor = env->GetMethodID(arrayListClass, "<init>", "()V"); // Find ArrayList constructor jobject arrayList = env->NewObject(arrayListClass, constructor); // Create new ArrayList instance jmethodID add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // Find the ArrayList::add method jbyteArray item =env->NewByteArray(10); // Instantiate a new byte[] env->CallBooleanMethod(arrayList, add, item); // Add the byte[] to the ArrayList 项然后返回列表。

示例

由于我没有可用的JNI环境,因此这段代码只是插图(当你开始工作时可以自由编辑它),但你需要的是:

file.php