gpt4 book ai didi

java - C 错误的 JNI 访问对象数组

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:42 24 4
gpt4 key购买 nike

我有一个使用 c++ 库的 android 项目,我需要将一个对象数组发送到 c++ 代码。

这是我的 Java 原生绑定(bind)代码

class MyLib {
public static native void testArray(String[] array);
}

我是这样调用它的

...
MyLib.testArray(new Object[20]);
...

这是我的 C++ jni 代码:

JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr) {
__android_log_print(ANDROID_LOG_INFO,"test","test array!!!!!!!!");
int count = env->GetArrayLength(arr);
__android_log_print(ANDROID_LOG_INFO,"test","array length %d", count);
for (int i=0; i<count; i++) {
__android_log_print(ANDROID_LOG_INFO,"test","--- get item %d", i);
jstring jkey = (jstring) env->GetObjectArrayElement(arr, i);
__android_log_print(ANDROID_LOG_INFO,"test","item %d", i);
env->DeleteLocalRef(jkey);
}
}

当我执行它时,logcat 显示这个并且执行以 sigsev 11 结束

JNI WARNING: jarray arg has wrong type (expected array, got Ljava/lang/Class;) in Lcom/android/mypackage/MyLib;.testArray:([Ljava/lang/Object;)V (GetArrayLength)

知道为什么我的数组引用看起来是类引用吗?我对 native 类型的数组没有问题,只有对象。

最佳答案

我相信你的函数签名

JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr)

应该是这样的:

JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jclass clazz, jobjectArray arr)

您缺少第二个参数 - 在静态方法中它始终是 Class 对象。

关于java - C 错误的 JNI 访问对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771725/

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