如何将指向数组的指针从JNIC代码发送到Java代码?
如何将指向数组的指针从JNIC代码发送到Java代码?例如: JNIC代码: Java Func:如何将指向数组的指针从JNIC代码发送到Java代码?,java,c,pointers,java-native-interface,Java,C,Pointers,Java Native Interface,如何将指向数组的指针从JNIC代码发送到Java代码?例如: JNIC代码: Java Func: java函数接收指向数组的指针时应该是什么样子?首先,代码有两个问题: arr实际上不是一个数组(它指向一个jvalue),因此没有理由通过指针而不是仅仅通过值来传递它 除了最后一个赋值外,所有那些a1.X赋值都是无用的,因为jvalue是所有可能的原语和引用类型的联合 下一步:不可能将原始C指针传递给JNI(当然,可以,但只能让Java将指针视为数字而不是对象)。您必须创建一个Java数组或缓冲
java函数接收指向数组的指针时应该是什么样子?首先,代码有两个问题:
arr
实际上不是一个数组(它指向一个jvalue),因此没有理由通过指针而不是仅仅通过值来传递它a1.X
赋值都是无用的,因为jvalue
是所有可能的原语和引用类型的联合李>
下一步:不可能将原始C指针传递给JNI(当然,可以,但只能让Java将指针视为数字而不是对象)。您必须创建一个Java数组或缓冲区对象。如果您要创建一个引用数组,那么数组是好的,尽管必须复制内存;如果您希望C数组与Java缓冲区共享内存,那么缓冲区是很好的。@auselen请在所有有关SO的问题下留下此评论!(这个家庭作业是我想写的某个模块的准备工作)下次试着给出一个更好的答案,这样你就不会得到两张反对票。你为什么使用
CallVoidMethodA()
而不是更简单的CallVoidMethod()
?
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);
public void print(?????) { // what should be the argument here ?
// add code here
}