我有一个获得双指针的函数
int getList(unsigned char **list); //it returns a list of something
我想知道如何将双指针从本机代码(JNI)传递给我的函数。任何人?
这是我尝试过但它不起作用。
jint Java_test_test_Activity_getList(JNIEnv *env, jobject this, jobjectArray list, jint size){
jint count=0;
jbyteArray bArray;
jByteArray cList;
count=(*env)->GetArrayLength(env, list);
for(int i=0; i<count; i++){
bArray[i]=(*env)->GetObjectArrayElement(env, list, i);
(*env)->GetByteArrayRegion(env, bArray[i], 0, size, cList[i]);
}
return getList(cList);
}
答案 0 :(得分:0)
你不能使用'&amp;'运营商得到你的jByteArray的地址?
return getList(&cList);
'&安培;'在C / C ++中为您提供变量的地址(指针)。您可以在指针上使用它来获取双指针。 但是我不确定jByteArray和unsigned char *之间的转换是如此简单,你可能还有别的事情要做。
答案 1 :(得分:0)
双指针通常不是什么大问题。你只需记住所有3层。
所以我们假设我们处于第3级,我们正在使用指针p2。
所以为了保持一个双指针,你需要返回最低层的指针。 (例如(&amp;(&amp; a)))
如上所述,为了达到你需要解除引用的价值两倍。 (例如*(* ptr))
为什么要尝试将jobjectArray元素存储到jByteArray元素中?
bArray[i]=(*env)->GetObjectArrayElement(env, list, i);
此外,代替jByteArray cList,您可以直接使用C / C ++等价物,但这可能与修复错误无关。