0 голосов
 
56 просмотров
30.12.2019 / 16:19  SuperSystem

хранение обекта в нативном коде

Когда я сохраняю объект в нативном коде и достаю обратно, то получается ошибка.
Подскажите как правильно это сделать.
Вот пример:
  1. #include<jni.h>
  2. jobject o;
  3. extern "C"
  4. {
  5.     JNIEXPORT void JNICALL Java_jni_test_TestJni_set(JNIEnv* env, jobject thiz,jobject obj)
  6.     {
  7.         o = obj;
  8.     }
  9.     JNIEXPORT jobject JNICALL Java_jni_test_TestJni_get(JNIEnv* env, jobject thiz)
  10.     {
  11.         return o;
  12.     }
  13. }
Я сначала добавляю TestJni.set(Object)
А потом достаю Object=TestJni. get()
И выходит ошибка.
Заранее спасибо.
Изм. SuperSystem от 30.12.2019 / 16:28
30.12.2019 / 16:27  SuperSystem
кстати с переменными типа jint, jfloat... ошибок нету, тут конкретно с объектами проблема.
30.12.2019 / 19:06  aNNiMON
Так и пишет "Ошибка" и всё? И никаких подробностей?
30.12.2019 / 21:24  SuperSystem
Хоть оператор try ставь, вообще из приложения выходит.
31.12.2019 / 02:26  Alexandr
Какие же всетаки уродливые все эти "Java_jni_test_TestJni_"
31.12.2019 / 05:10  Витаминыч
Алехандр, по мне так вообще весь код какая-то бредятина :ded:
Ответы
 
2 голоса
 
# 30.12.2019 / 21:32  SuperSystem
Проблема решена!
Нужно было закрепить обект в jni
  1.   #include<jni.h>
  2. jobject o;
  3. extern "C"
  4. {
  5.     JNIEXPORT void JNICALL Java_jni_test_TestJni_set(JNIEnv* env, jobject thiz,jobject obj)
  6.     {
  7.         o = env->NewGlobalRef(obj);
  8.     }
  9.     JNIEXPORT jobject JNICALL Java_jni_test_TestJni_get(JNIEnv* env, jobject thiz)
  10.     {
  11.         return o;
  12.     }
  13. }
Всего: 1

Реклама

Мы в соцсетях

vk tw tg yt