JNI 从 C 错误访问对象数组
JNI access object array from C error
我有一个使用 c++ 库的 android 项目,我需要向 c++ 代码发送一个对象数组。
这是我的 Java 本机绑定代码
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)
知道为什么我的数组引用似乎是类引用吗?我对本机类型的数组没有问题,只有对象。
我相信你的函数签名
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 对象。
相关文章:
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组