Как получить значение String в C++ из метода Java с использованием JNI
У меня есть метод в моем классе Java, который возвращает строку. Подпись метода current ()Ljava/lang/String; Я мог бы создать идентификатор класса и метода с JVM в моем родном вызове. Сделали GetStaticMethodID и т.д... все в порядке.
Как вызвать этот метод? например: env->CallIntMethod() env->CallCharMethod() .... какой вариант вернуть строку?
В C++ мне нужно скопировать это строковое значение, восстановленное этим методом Java. Примечание: я могу изменить сигнатуру метода в банке, если это необходимо. Или можете добавить другой метод, чтобы обернуть другой.
1 ответ
Метод, который возвращает Java String, должен называться как
jstring js = static_cast<jstring>(env->CallObjectMethod(jobj, mId));
Теперь вы можете использовать
const char *cstr = env->GetStringUTFChars(js, nullptr);
Не забудьте освободить строку после использования:
env->ReleaseStringUTFChars(js, cstr);
Вы можете счесть необходимым выпустить локальную ссылку на Java,
env->FreeLocalReference(js);