Как получить значение 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);
Другие вопросы по тегам