我在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