- 締切済み
android-JNIでクラス配列参照方法について
androidのJNIで関数引数をクラス配列にした場合、C側ではこのポインタをどのようにすれば取得出来るのでしょうか? 一応GetByteArrayElements()を使用してクラス配列の要素数までは取得できましたが、このクラスのポインタの取得方法が出来ません。 ※クラス配列にある変数をC言語側で参照したいと考えております。 (このクラスはC言語の構造体として扱うようにしています)
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
GetByteArrayElements()とか「クラス配列にある変数」というのがやろうとしていることとどういう関係にあるのか、質問文にある内容だけでは分かりません。 クラスの配列を引数に取るJNIメソッドの例です。 Java側でClass[]型になっている引数はCではjobjectArrayになります。GetObjectArrayElement()で配列から取り出した値をjclassにキャストします。GetMethodID()でメソッドを取得できることが分かると思います。 〔Java〕 public static native void f(Class[] array); 〔C〕 JNIEXPORT void JNICALL Java_qa8053591_f(JNIEnv *env, jclass cls, jobjectArray array) { int i; int n=(*env)->GetArrayLength(env, array); printf("Array size=%d\n", n); for (i=0; i<n; i++) { jclass obj=(jclass)((*env)->GetObjectArrayElement(env, array, i)); jmethodID meth=(*env)->GetMethodID(env, obj, "toString", "()Ljava/lang/String;"); printf("elem[%d]=%p, toString()=%p\n", i, obj, meth); } }