JNI GetStaticObjectField и CallStaticObjectMethod возвращают ноль - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть 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 не изменился в обновлении и является точно таким же.

...