2

如何将指向数组的指针从 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函数:

public void print(?????) { // what should be the argument here ?
  // add code here
}

java 函数应该如何接收指向数组的指针?

4

1 回答 1

1

首先,您的代码存在两个问题:

  1. arr实际上不是一个数组(它指向单个 jvalue),因此没有理由通过指针而不是值来传递它。
  2. 所有这些a1.X赋值都是无用的,除了最后一个,因为jvalue它是所有可能的原始类型和引用类型的联合

Next: 将原始 C 指针传递给 JNI 是不可能的(嗯,你可以,但你只能让 Java 将指针视为数字而不是对象)。您必须创建一个 Java 数组或缓冲区对象。如果要创建引用数组,则数组很好,尽管必须复制内存;如果您希望 C 数组与 Java 缓冲区共享内存,则缓冲区很好。

于 2012-10-06T08:35:44.723 回答