【问题标题】:Invoking java method using jni使用 jni 调用 java 方法
【发布时间】:2013-05-28 12:53:38
【问题描述】:

我在java中有以下方法,我尝试从cpp调用,

public void callback(short[] sArray) {
    Log.e("java", ""+sArray.length);
}

在 cpp 中我尝试了这段代码来调用 java 方法:

jclass cls = env->GetObjectClass(obj);
jmethodID mid =
env->GetMethodID(cls, "callback", "([S)V");
    if (mid == NULL) {
        return 0; // method not found
    }
     //short *sbuffer;
     //sbuffer is filled with some data
    env->CallVoidMethod(obj, mid,sbuffer);

但我收到了这个错误:

05-28 18:13:29.850:W/dalvikvm(18423):间接引用无效 decodeIndirectRef 05-28 18:13:29.850 中的 0x75402008:E/dalvikvm(18423): VM 中止 05-28 18:13:29.850:A/libc(18423):致命信号 11 (SIGSEGV) 在 0xdeadd00d (code=1),线程 18423 (ssconverterdemo)

我在这里做错了什么?

【问题讨论】:

    标签: android android-ndk java-native-interface


    【解决方案1】:

    该方法需要一个数组参数,你不能将C数组传递给java。

    How to return an array from JNI to Java?

    这解释了如何将数组从 jni 传递给 java

    【讨论】:

      【解决方案2】:

      CallVoidMethod 之类的东西,或者接受jvalue 格式的参数。您需要将您的sbuffer 转换为jshortArray,然后生成一个代表它的jvalue,然后将jvalue 条目传递给CallVoidMethod

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多