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
}