2011-07-29 2 views
2

J'essaie de comprendre jni, alors j'ai commencé à pirater hellojni, et j'ai rencontré ce problème.getArrayLength() renvoie un nombre énorme ...

Mon code java ressemble à ceci:

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

et mon code C ressemble à ceci:

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); 
... 
... 

La sortie est:

longueur du tableau: 1079082088

Pourquoi la longueur du tableau est-elle si grande?

+0

c'est bizarre, même en passant un entier simple ne fonctionne pas! que se passe t-il ici!!! – user645402

+0

Est-ce vraiment votre fonction entière, ou est-ce qu'il manque quelque chose? – EboMike

Répondre

4

Pourriez-vous montrer votre fichier JNI entier? Vous ne déclarez pas l'objet cible dans votre fonction JNI. Habituellement, les arguments sont JNIEnv * env, jobject javaObject, etc. Cela signifie que ce que vous croyez est le jshortArray est en fait le pointeur vers un objet Java, ce qui expliquerait les résultats bizarres que vous obtenez.

+1

Mai aussi bien l'épeler: Votre fonction devrait ressembler à ceci: 'jint Java_com_example_hellojni_HelloJni_write (JNIEnv * env, jobject thisObj, jshortArray buf, jint off, jint len)'. – EboMike

Questions connexes