2009-08-04 8 views
1

J'ai un magasin d'objets en Java. Mon programme C stocke des données (sous forme de tableau char) dans Java. Maintenant, je souhaite récupérer les données de mon magasin. Je ne trouve aucun appel de fonction qui me renvoie un tableau char. Comment puis-je faire ceci?Retour tableau tableau de java à C - JNI

+0

Votre question doit encore être nettoyée un peu. Comment votre programme C stocke-t-il quelque chose en Java? Avez-vous résolu tous les problèmes d'encodage de caractères? –

Répondre

1

Vous devez utiliser l'une des API fournies par JNI, probablement GetCharArrayElements(). Voici un exemple tiré du code de travail qui récupère un tableau d'octets de Java en C (le code est une fonction invoquée par Java, mais les mécanismes sont identiques).

JNIEXPORT void JNICALL Java_xxx_jniEnqueue(JNIEnv *jep,jobject thsObj, 
jlong handle, jbyteArray jvaKey, jint jvaKeyOfs, jint jvaKeyLen, jbyteArray jvaData, jint jvaDtaOfs, jint jvaDtaLen) { 
    jbyte   *jniKey,*jniData; 
    jthrowable  escObj; 

    jniKey=(*jep)->GetByteArrayElements(jep,jvaKey,0); 
    jniData=(*jep)->GetByteArrayElements(jep,jvaData,0); 
    ... 
    memcpy(odp->enqpfx->Msg,jniKey+jvaKeyOfs,(vuns)jvaKeyLen);    /* key badly named Msg */ 
    ... 
    // enqueue data using key 
    if(/* enqueue failed */) { 
     (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */ 
     (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */ 
     throwEscapeObject(jep,escObj); 
     return; 
     } 
    (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */ 
    (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */ 
    }