アンドロイドアプリでCライブラリ(Pre-written and published)を使用しようとしています。私はこのCライブラリの周りにJNIラッパーを書くことに努力しました。私はint[]
が内側にそれらを印刷してもCライブラリに通過していることを確認しましたC関数へのパラメータとしてjchararrayを送信する方法
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);
}
のように私のJNIラッパーが見え
int getData(char data[], const int dataLen, int unit[], const int unitLen) {
...
}
C.
に適切
jchararray
に渡す方法を見つけ出すことはできません
getData()
メソッド。しかし問題は
jcharArray data_
に
char data[]
に
(*env)->GetArrayLength(env, data_);
を使用して長さを得た後にdata_
を印刷しました。私はJava_eg_test_freqProcessor
メソッドの内部で印刷するとき、私は
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 : }
を参照してくださいしかし、私は同じセットに反復場合getData()
メソッドの内部で、私はデータのみの半分を参照してください。
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 :
このライブラリは、後でアクセスする必要があるdata[]
の場所変換を実行します。私はjchar
がchar
よりも大きいバイトであることを理解していますが、これに近づく正しい方法をまだ理解できません。
おかげ