web-dev-qa-db-ja.com

jstringをcharに変換するJNI *

JNIを使​​用して、JavaからCコードにjstringデータ型としてURL文字列を渡しました。そして、私のライブラリメソッドには、URLとしてchar *が必要です。

char *jstringを変換するにはどうすればよいですか?

追伸:CでjcharArrayを使用する利点はありますか? (つまり、ネイティブメソッドで文字列の代わりにchar []を渡す)

108
Prasham

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);
}
216
Jason Rogers

最初にジェイソン・ロジャースの回答に感謝します。

Android && cppは次のようになります。

const char *nativeString = env->GetStringUTFChars(javaString, nullptr);

// use your string

env->ReleaseStringUTFChars(javaString, nativeString);

このエラーを修正できます:

1.エラー: '->'の基本オペランドに非ポインター型 'JNIEnv {aka _JNIEnv}'があります

2.エラー:「_JNIEnv :: GetStringUTFChars(JNIEnv *&、_jstring *&、bool)」の呼び出しに一致する関数はありません

3.エラー:「_JNIEnv :: ReleaseStringUTFChars(JNIEnv *&、_jstring *&、char const *&)」の呼び出しに一致する関数はありません

4.「env-> DeleteLocalRef(nativeString);」を追加します最後に。

46
kangear