JNI - как использовать несколько экземпляров оболочки Jni с разными полями?

фон

У меня есть проект Android, который использует JNI (используя NDK) для кодирования на Java и C / C ++.

Мы создали Java-оболочку Jni на стороне Java, которая будет выполнять все операции Jni самостоятельно, в то время как никакой другой класс Java не может получить доступ к операциям jni напрямую, кроме этой оболочки.

эта проблема

проблема в том, что я хочу создать несколько экземпляров этой оболочки, в то время как часть Jni должна иметь экземпляр для каждой оболочки Jni.

это проблема, так как часть Jni содержит одинаковые поля для всех экземпляров.

вопрос

Как я могу решить эту проблему, чтобы для каждого экземпляра java оболочки jni был экземпляр на части jni?

Я думал, может быть, я мог бы поместить все поля в класс C ++, и иметь функцию init (), которая будет возвращать новый экземпляр этого для CTOR JniWrapper, и с тех пор, для каждой функции JNI, которая нуждается в полях , он получит этот класс в качестве параметра. может быть, это может быть указатель, как показано наэта ссылка.

к сожалению, я понятия не имею, как это сделать.

Может кто-нибудь, пожалуйста, помогите?

образец

Вот'Пример кода, который, я надеюсь, прояснит ситуацию для тех, кто нене понимаю проблемы:

Java часть:

public class JniWrapper
  {
  static
    {
    System.loadLibrary("JniTest");
    }

  private native void foo(Bitmap bitmap);
  }

JNI часть:

...
// sadly, all of those fields are actually a global fields
int _intField;
float _floatField;    
//those are just sample fields. i would also like to store pointers and objects...

JNIEXPORT void JNICALL ...foo(JNIEnv * env, jobject obj, jobject bitmap)
  {
  // do something with the fields, as if they all belong to the JniWrapper, 
  // and no other instances of JniWrapper are allowed to change them
  }

Ответы на вопрос(2)

Ваш ответ на вопрос