gpt4 book ai didi

java - 如何使用自定义 Object 类为 JNI 方法定义返回类型?

转载 作者:太空狗 更新时间:2023-10-29 23:09:41 27 4
gpt4 key购买 nike

我在 JNI (C++) 中有一个方法,我希望能够返回自定义对象类型(不是原始类型或字符串等...)我已经写下了一些东西,但我一直收到 java.lang.UnsatisfiedLinkError 错误。

详情如下:

方法:

static jobject Java_android_sdk_Core_ProcessFrame(JNIEnv *env, jobject myobj, jbyteArray frameData)
{

jclass clazz;
jmethodID cid;
jobject jCoreOut;
static const char* const strClassName = "android/sdk/Core/CoreOutput";
clazz = env->FindClass(strClassName);
if (clazz == NULL) {
LOGE("Can't find class CoreOutput");

}
cid = env->GetMethodID(clazz,"<init>", "()V");
jCoreOut = env->NewObject(clazz, cid);


// Free local references
env->DeleteLocalRef(clazz);

return jCoreOut;

}

我有以下方式定义的方法描述符:

    static const JNINativeMethod gMethods[] = {
{ "CreateCore", "(III)V", (void*) Java_android_sdk_Core_CreateCore },
{ "ProcessFrame", "([B)Landroid/sdk/Core/CoreOutput;", (void*) Java_android_sdk_Core_ProcessFrame }
};

我正在调用方法注册:

     if (env->RegisterNatives(clazz, gMethods,
sizeof(gMethods) / sizeof(gMethods[0])) != JNI_OK)
{
LOGE("Failed registering JNI methods");
return result;
}

并且我的其他本地方法注册成功。 (我可以使用它们...)

当我尝试调用 ProcessFrame 方法时,我从 Logcat 得到以下输出:

11-23 16:10:10.139: ERROR/AndroidRuntime(4923): java.lang.UnsatisfiedLinkError: ProcessFrame

我确定这与我没有正确定义方法有关。任何人都可以阐明这一点吗?

谁能给我指点一个很好的教程,它不仅涵盖了 JNI 中原始类型的处理?

谢谢,

伊塔马尔

最佳答案

UnsatisfiedLinkError 当JVM 找不到方法时抛出。所以它与你的方法声明有关。查看 javah 为您创建函数头。看看这个:javah

关于java - 如何使用自定义 Object 类为 JNI 方法定义返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259499/

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