gpt4 book ai didi

java - 将数组从 JNI 传递到 Java

转载 作者:行者123 更新时间:2023-11-30 17:30:45 26 4
gpt4 key购买 nike

我想从 JNI 到 Java 访问数组(通过创建共享库 libtest.so 文件)
我这样做如下:

JNI 代码 (C)

int size = 5;                              /* Array Size */
char sample_arr[size] = {1, 2, 3, 4, 5}; /* Array to be accessed in Java */

jbyteArray result_arr = (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, result_arr, 0, size, sample_arr);

jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");
(*env)->CallVoidMethod(env, obj, mid, get_event);

我相信 JNI 中的 jbyte 与 char 等效。
上面的代码被编译形成共享对象libtest.so

Java 代码

public class Callbacks 
{
char result_arr[];
public void Callbacks() {
System.loadLibrary("test"); /* Load the Shared Object */
}

public void callback(int get_event)
{
....
Log.d(TAG, "Received Array at Java: result_arr[] : "+Arrays.toString(result_arr));
....
}
}

输出

D/[JNI] (3106): Recieved Array at Java: result_arr[] : null

输出应该是:1, 2, 3, 4, 5,但我得到null

这是访问数组的正确方法吗?
有错误请指出。

我是java新手,也是JNI的初学者。不过精通C。
如果有任何帮助,我将不胜感激。

最佳答案

您到底是如何将 result_arr 数组从 JNI 发送回 Java 的?我不确定 get_event 参数应该是什么,但它绝对不是对 result_arr 的引用。您应该执行以下两件事之一:A)向回调添加第二个参数并将 result_arr 传递回 Java,或者 B)从 JNI 购买获取类并获取 field ID 设置 Callbacks.result_arr 实例变量对于那堂课。如果您需要更多帮助,您将需要发布更完整的代码。

关于java - 将数组从 JNI 传递到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com