我在JNI(C++)中有一个方法,我希望能够返回一个自定义的对象类型(不是原始类型或字符串等)。 我已经写了一些东西,但我不断得到java.lang。 UnsatisfiedLinkError错误。如何使用自定义Object类为JNI方法定义返回类型?
下面是详细信息:
的方法:
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的原因。显然,我试图返回一个被定义为Core内部类的类型是这个问题。一旦我将CoreOutput定义移动到它自己的类文件中,它就起作用了。有没有人知道如何在这种情况下返回一个内部类? – Ita 2010-11-24 17:34:39