如何将结构作为参数传递给java函数或从jni返回java

Pra*_*ada 5 c java java-native-interface android android-ndk

我有两个问题说我在 jni 中有一些结构说

struct X
{
    Type_A x;
    Type_B y;
}
Run Code Online (Sandbox Code Playgroud)

现在我该怎么办?

  1. 将此结构作为参数传递给 java 回调函数
  2. 如何将此结构返回给 Java 函数。

如果可以的话,请举个例子。

184*_*615 1

如果将数据结构传递给 Java,则它必须是 Java 对象。你可以在JNI端创建它,也可以填写一个由Java传递给JNI的参数对象。(例如,Java 可以创建 anew byte[4096]并将其传递给 JNI 函数以将结果存储在那里。)

但有时您希望 Java 存储指向本机结构的指针。您将此类指针转换为 int/long 并将其传递给 Java。没有 Java 垃圾收集器会释放此类内存,您必须显式地执行此操作(如在 C 中)。此外,您还需要调用 JNI 函数来释放此类内存。您可以使用Finalize(),但我建议在可预测的时间从可预测的线程显式释放(!)。