首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组从JNI传递到Java

将数组从JNI传递到Java
EN

Stack Overflow用户
提问于 2014-07-28 09:15:33
回答 1查看 646关注 0票数 0

我希望访问一个从JNI到Java的数组(通过创建共享库libtest.so文件)

我是这样做的:

JNI代码(C)

代码语言:javascript
运行
复制
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中的j字节与char相当。

上面的代码被编译成一个共享对象libtest.so

Java代码

代码语言:javascript
运行
复制
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));
        ....
    }
}

输出

代码语言:javascript
运行
复制
D/[JNI] (3106): Recieved Array at Java: result_arr[] : null

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

这是访问数组的正确方式吗?

请指出任何错误。

我是java新手,也是JNI的初学者。但精通C语言。

我希望能在这方面提供任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-07-28 16:30:29

您究竟是如何将result_arr数组从JNI发送回Java的?我不知道get_event参数应该是什么,但它绝对不是对result_arr的引用。您应该做两件事中的一件:( A)向回调添加第二个参数,并将result_arr传递回Java,或B)设置来自JNI的Callbacks.result_arr实例变量,获取该类,然后为该类获取字段ID。如果您想要更多的帮助,您将需要发布更完整的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24991970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档