Как определить тип возвращаемого значения для метода JNI с помощью пользовательского класса Object? - PullRequest
3 голосов
/ 23 ноября 2010

У меня есть метод в JNI (C ++), и я хочу иметь возможность возвращать пользовательский тип объекта (не примитив или строку и т. Д.). Я что-то записал, но продолжаю получать java.lang.UnsatisfiedLinkError error.

Вот подробности:

Метод:

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?

Спасибо,

Итамар

1 Ответ

1 голос
/ 23 ноября 2010

UnsatisfiedLinkError генерируется, когда JVM не может найти метод. Так что это связано с объявлением вашего метода. Посмотрите в javah для создания заголовка функции для вас. Посмотрите на это: Джава

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...