Ошибка JNI_OnLoad: невозможно найти decl для встроенной функции с signature () Ljava / lang / String - PullRequest
0 голосов
/ 21 июня 2011

В настоящее время я использую SWIG / jni для вызова функций C ++ из java для приложения Android. Тем не менее, у меня возникают трудности всякий раз, когда функция возвращает jstring. Я получаю следующие ошибки в LogCat при запуске приложения ...

ОШИБКА : не удается найти decl для собственного Lcom / example / swigJNI; .plugin_name: L () java / lang / String

ОШИБКА : невозможно найти decl для собственного Lcom / example / swigJNI; .plugin_description: L () java / lang / String

Вот код, который может быть полезен для изучения ...

Код оболочки, сгенерированный SWIG:

 SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1name(JNIEnv *jenv, jclass jcls) {
  jstring jresult = 0 ;
  char *result = 0 ;

  (void)jenv;
  (void)jcls;
  result = (char *)plugin_name();
  if (result) jresult = jenv->NewStringUTF((const char *)result);
  return jresult;
}


SWIGEXPORT jstring JNICALL Java_swigJNI_1plugin_1description(JNIEnv *jenv, jclass     jcls) {
  jstring jresult = 0 ;
  char *result = 0 ;

  (void)jenv;
  (void)jcls;
  result = (char *)plugin_description();
  if (result) jresult = jenv->NewStringUTF((const char *)result);
  return jresult;
}

Декларация JNI Родные методы:

static const JNINativeMethod methods[] = {
    {"plugin_name", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1name},
    {"plugin_description", "()Ljava/lang/String", (void*) Java_swigJNI_1plugin_1description}
};

Я успешно выполнил JNI_onLoad () и RegisterNatives (), когда функции возвращают int, однако строки для меня были довольно проблематичными. Я не совсем понимаю, как эти функции не найдены. Я что-то упускаю?

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

Ааа, я чувствую себя дураком!

Подпись, которую я использовал для строки, была ...

()Ljava/lang/String

когда это действительно должно быть ...

()Ljava/lang/String;

Забыл точку с запятой. Ack!

0 голосов
/ 21 июня 2011

Вы помещаете файл заголовка вашего java-класса (сгенерированный файл заголовка c) в код на c ++, где определяется нативный метод.

итак, сгенерируйте заголовочный файл C, содержащий прототип функции для реализации собственного метода

...