JNI преобразование jstring в char *
Я передал строку URL из кода Java в C как jstring
тип данных с помощью JNI. И мой библиотечный метод нуждается в char *
как url.
Как преобразовать jstring
в char *
?
P.S.: Есть ли какие-либо преимущества использования jcharArray в C? (т.е. передача char []
вместо строки в нативном методе)
Ответы
Ответ 1
Вот пара полезных ссылок, которые я нашел, когда начал с JNI
http://en.wikipedia.org/wiki/Java_Native_Interface
http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
относительно вашей проблемы вы можете использовать это
JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);
// use your string
(*env)->ReleaseStringUTFChars(env, javaString, nativeString);
}
Ответ 2
Спасибо Джейсону Роджерсу ответь первым.
В Android && cpp должно быть так:
const char *nativeString = env->GetStringUTFChars(javaString, nullptr);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
Можно исправить эти ошибки:
1.error: базовый операнд '->' имеет тип без указателя 'JNIEnv {aka _JNIEnv}'
2. Ошибка: нет соответствующей функции для вызова '_JNIEnv :: GetStringUTFChars (JNIEnv * &, _jstring * &, bool)'
3. Ошибка: нет соответствующей функции для вызова '_JNIEnv :: ReleaseStringUTFChars (JNIEnv * &, _jstring * &, char const * &)'
4.add "env-> DeleteLocalRef (nativeString);" в конце.