2011-07-29 11 views
2

私はjniを理解しようとしていますので、hellojniをハッキングし始めました。この問題が発生しました。getArrayLength()は巨大な数値を返しています...

私のJavaコードは次のようになります。

    short[] buf = new short[16]; 
        Log.d("hello", "before!"); 
        write(buf, 0, 16); 

と私のCコードは次のようになります。

jint 
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len) 
{ 
    char debug[1024]; 
    int ii = 0; 
    jsize cbuflen = (*env)->GetArrayLength(env, buf); 

    sprintf(debug, "array length: %d", cbuflen); 
    LOGD(debug); 
... 
... 

出力は次のようになります。

配列の長さ:1079082088

なぜ配列の長さはとても大きいですか?

+0

これは奇妙です、単純な整数を渡しても動作しません!何が起きてる!!! – user645402

+0

これは本当にあなたの全体の機能ですか、それとも不足しているものがありますか? – EboMike

答えて

4

JNIファイル全体を表示できますか? JNI関数でターゲットオブジェクトを宣言していません。引数は通常JNIEnv * env、jobject javaObjectなどです。これは、jshortArrayが実際にJavaオブジェクトへのポインタであると信じていることを意味します。これはあなたが得ている奇妙な結果を説明します。

+1

5章でも説明します。関数は次のようになります。 'jint Java_com_example_hellojni_HelloJni_write(JNIEnv * env、jobject thisObj、jshortArray buf、jint off、jint len)'。 – EboMike

関連する問題