У меня есть c ++ .dll, которая пытается получить статический объект задания из Java-приложения через JNI.У меня нет проблем с получением jmethodID через GetStaticMethodID или jfield id через GetStaticFieldID.Однако при попытке получить объект возвращает ноль.
Я подозреваю, что Java-приложение так или иначе предотвращает вызовы объектов JNI.Мой вопрос: как можно предотвратить получение объекта с ++, есть ли другой способ получить объект из JVM или альтернативы JNI.
Обновление:
jclass abc_class = env->FindClass( "abc" );
jfieldID a_field = env->GetStaticFieldID(class, "a", "Labc;");
jobject a_object = env->GetStaticObjectField(class, field);
ВышеЗначение a_object равно нулю, равно как и значение равно нулю
jclass abc_class = env->FindClass( "abc" );
jmethodID abc_method = env->GetStaticMethodID( abc_class, "A", "()Labc;" );
jobject a_object = env->CallStaticObjectMethod( abc_class, abc_method );
Класс выглядит примерно так:
public class abc
{
private static abc a; //Singleton of the class
public abc()
{
abc.a = this;
}
public static abc A()
{
return abc.a;
}
public void a()
{
//Stuff
}
}
public class Main
{
public static void main(final String[] \u2603)
{
new abc().a();
}
}
Обновление: работает в более старой версии приложения, однако в более новой версиимешает этому работать.Класс abc не изменился в обновлении и является точно таким же.