Вывод: javap -s SomeClass
public org.someapp.SomeClass$_data data;
Signature: Lorg/someapp/SomeClass$_data;
Определение SomeClass в Java:
class SomeClass
{
private class _data {
byte[] something = new byte[1234];
}
public _data data;
}
Определение нативной функции в Java:
public static native int NativeFunction(SomeClass something);
Реализация Java:
SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);
Однако, когда выполняется следующий код:
JNIEXPORT jint JNICALL Java_org_someapp_NativeInterface_NativeFunction(JNIEnv* env, jobject obj, jobject someobject) {
jclass some_class = (*env)->GetObjectClass(env, someobject);
jfieldID data = (*env)->GetFieldID(env, some_class, "data", "Lorg/someapp/SomeClass$_data");
}
Java вызывает исключение «NoSuchFieldError ;: data» при вызове GetFieldID. Я не понимаю .. Сигнатура в порядке (скопировано прямо из javap).
Обратите внимание, что получение идентификатора поля для более простой переменной, такой как unsigned short (с подписью "S"), работает просто отлично.