如何从JNI C代码向Java代码发送指向数组的指针?例如:
JNI C代码:
jclass cls = (*env)->GetObjectClass(env,obj);
jmethodID mid = (*env)->GetMethodID(env,cls,"print"," ?? "); // What should be the signature here ?
jvalue a1,*arr;
a1.i = 2002;
a1.f = 12.90;
a1.c = 's';
a1.j = 344554;
a1.b = TRUE;
arr = &a1;
(*env)->CallVoidMethodA(env,obj,mid,arr);
Java Func:
public void print(?????) { // what should be the argument here ?
// add code here
}
java函数应该如何接收指向数组的指针?
答案 0 :(得分:1)
首先,您的代码有两个问题:
arr
实际上不是一个数组(它指向一个jvalue),因此没有理由通过指针而不是仅通过值传递它。a1.X
作业都没用,除了最后一项,因为jvalue
是所有可能的基元和参考类型的联合。 下一步:将原始C指针传递给JNI是不可能的(好吧,你可以,但你只能让Java将指针看作一个数字而不是一个对象)。您必须创建Java数组或缓冲区对象。如果你要创建一个引用数组,那么数组很好,尽管必须复制内存;如果希望C数组与Java缓冲区共享内存,那么缓冲区就很好。