J'essaie d'utiliser une bibliothèque C (pré-écrite et publiée) dans une application Android. J'ai commencé mon effort sur l'écriture d'un wrapper JNI autour de cette bibliothèque C. Je ne peux pas comprendre comment passer en jchararray
correctement à C.Comment envoyer un jchararray en tant que paramètre à la fonction C
int getData(char data[], const int dataLen, int unit[], const int unitLen) {
...
}
Mon wrapper JNI ressemble
Java_eg_test_freqProcessor(JNIEnv *env, jclass type, jcharArray data_,
jintArray unit_) {
jchar *data = (*env)->GetCharArrayElements(env, data_, NULL);
jsize dataLen = (*env)->GetArrayLength(env, data_);
jint *unit = (*env)->GetIntArrayElements(env, unit_, NULL);
jsize unitLen = (*env)->GetArrayLength(env, unit_);
getData(data, dataLen, unit, unitLen);
(*env)->ReleaseCharArrayElements(env, data_, data, 0);
(*env)->ReleaseIntArrayElements(env, unit_, unit, 0);
}
J'ai vérifié que int[]
passent par la bibliothèque C et en les imprimant à l'intérieur getData()
méthode. Mais le problème est avec le passage jcharArray data_
à char data[]
J'ai imprimé le data_
après avoir obtenu la longueur en utilisant (*env)->GetArrayLength(env, data_);
. Lorsque j'imprime à l'intérieur méthode Java_eg_test_freqProcessor
, je vois
06-29 23:05:42.364 12278 12348 V EEG : {
06-29 23:05:42.364 12278 12348 V EEG : "
06-29 23:05:42.364 12278 12348 V EEG : 0
06-29 23:05:42.364 12278 12348 V EEG : "
06-29 23:05:42.364 12278 12348 V EEG : :
06-29 23:05:42.364 12278 12348 V EEG :
06-29 23:05:42.364 12278 12348 V EEG : 1
06-29 23:05:42.364 12278 12348 V EEG : }
Mais dans la méthode getData()
, si j'itérer sur le même ensemble, je ne vois que la moitié des données.
06-29 23:08:07.801 12573 12651 V EEG Inside: 0 : {:
06-29 23:08:07.802 12573 12651 V EEG Inside: 1 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 2 : ":
06-29 23:08:07.802 12573 12651 V EEG Inside: 3 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 4 : 0:
06-29 23:08:07.802 12573 12651 V EEG Inside: 5 :
06-29 23:08:07.802 12573 12651 V EEG Inside: 6 : ":
06-29 23:08:07.802 12573 12651 V EEG Inside: 7 :
Cette bibliothèque effectue en place la transformation de data[]
que je besoin d'accéder plus tard. Je comprends que jchar
est un octet plus grand que char
mais je n'arrive toujours pas à comprendre la bonne façon d'aborder cela.
Merci