0

我在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 中的无效间接引用 0x75402008 05-28 18:13:29.850: E/dalvikvm(18423): VM 中止 05-28 18:13:29.850: A /libc(18423):致命信号 11 (SIGSEGV) 位于 0xdeadd00d (code=1),线程 18423 (ssconverterdemo)

我在这里做错了什么?

4

2 回答 2

2

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

如何将数组从 JNI 返回到 Java?

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

于 2013-05-28T13:00:34.770 回答
0

CallVoidMethodor else 这样的东西接受格式为jvalue. 您需要将您的sbuffer转换为 jshortArray,然后创建一个表示它的 jvalue,然后将jvalue条目传递给CallVoidMethod.

于 2013-05-29T07:33:17.910 回答