2012-02-17 10 views
0

を失敗しJNIは参照渡しは、私はJavaで次のコードを持って

JNIEXPORT jint JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName 
(JNIEnv *env, jobject obj, jstring name) { 
     name = (*env)->NewStringUTF(env, "Name2"); 
     return 0; 
    } 

を私は、画面上の結果はName2あるべきと仮定しかし、それはName1

です

答えて

0

文字列は不変です。代わりにそれを返すのはなぜですか?

public native String bar(); 

[..] 

JNIEXPORT jstring JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName 
     (JNIEnv *env, jobject obj) 
{ 
    return (*env)->NewStringUTF(env, "Name2"); 
} 
+0

私はint値を返す必要があり、私はライブラリの標準に従う必要があります。だから私が文字[]を使用すると、代わりに問題を解決するでしょうか? – ehsun7b

+0

私は、あなたが達成しようとしていることについてより詳細に説明しなければならないと思います。少し質問に追加できますか? –

+0

私がしたいのは、 'return'コマンドを使って値を返すことができないので、Cで渡されたパラメータを操作してJavaの新しい値にアクセスすることだけです。値の性質はStringやchar []のようなものです。 – ehsun7b

0

Cコードでは、nameはローカル変数です。それを変更しても、以前に指し示した文字列オブジェクトは変更されません。さらに、Java Stringは不変なので、オブジェクトを変更することはできません。整数戻り値を使用していないので、新しいStringへの参照を返すことができます。

+0

私はint値を返す必要があり、私はライブラリの標準に従う必要があります。だから私が文字[]を使用すると、代わりに問題を解決するでしょうか? – ehsun7b

+0

char []/jcharArrayを使用できます。配列操作に関するJNIのドキュメントを参照してください。 jcharは短いもので、Cの文字ではないことに注意してください。 –

関連する問題