2011-04-18 12 views
2

こんにちは、jniからJavaへの文字列をandroid-ndkに渡したいと思います。 これが私のネイティブ関数だとします。関数パラメータのchar文字列の値をJava文字列(JNIからJava)に渡す方法は?

private native int myFunc(String buffer); 

これは、JNIでの私のネイティブ関数である:

jint Java_com_example_twolibs_myFunc(JNIEnv* env, jobject thiz, jstring buffString){ 
    //I want to pass a character array to buffString from here, that I would read from java as String. 
return 0; 
} 

それを行うには?

+0

私はあなたがこれを行うことができるとは思わない - 新しい価値を再割り当てパラメータとして渡されたオブジェクトに渡します。新しい文字列オブジェクトを作成して返します。 –

答えて

2

質問をパーズできません。文字列を "javaからjniにjavaに渡す"は冗長に聞こえる。

ネイティブコードからStringの内容を取得するだけであれば、JNI GetStringUTFCharsを使用してUTF-8表現を取得できます。文字列は不変であり、直接変更することはできません。 NewStringUTFでネイティブから新しいStringを作成することができます。

NewStringUTFに渡される文字列データは、「変更されたUTF-8」形式でなければならないことに注意してください。その意味については、JNIのドキュメントを参照してください。

あなたがやりたいことは、周囲の文字を渡すことであれば、代わりにchar []バッファ(GetCharArrayElements、ReleaseCharArrayElements)を使用することができます。 Java言語文字はUTF-16なので、 "jchar"は符号なし16ビット値です(C++の8ビット "char"として扱わないでください)。

NDK内
+0

result = myFunc(testString)を呼び出すとします。ここで、testStringにはjniから渡された値が入ります。 注:私は、JavaでtestStringを作成し、ネイティブ関数に渡します。 GetStringUTFCharsはjstringから値を取得するために使用されますが、ネイティブ関数で値をjstringバッファに設定する方法は? – StarDust

+0

Java言語の文字列は不変です。 JNIから書き換えることはできません。 NewStringUTFを使用して新しい文字列を作成し、JNIメソッドから返すことができます(jintではなくjstringを返す必要があります)。 – fadden

関連する問題