Я передаю Java-объект типа «Свойства» в C ++, используя JNI.
Я получаю значение типа int, которое вставляется в объект Properties с помощью следующих операторов.
int intVal = 1;
Properties propObj = new Properties();
propObj.put("KEY_FOR_INT", intVal);
Когда я пытаюсь получить значение в c ++, используя JNI с помощью следующего оператора, я получаю случайные значения.
jint intValueFromJava = env->CallIntMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));
Если я пытаюсь получить строковое значение или ArrayList, я могу получить его правильно.
попытаться выяснить, произошло ли исключение после вызова
jint intValueFromJava = env->CallIntMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));
jthrowable exc = env->ExceptionOccurred();
Возможно, что метод, который вы вызываете, возвращает Object, а не int, если это
public synchronized V get(Object key);
Некоторое время не работал с jni, но возможно, что распаковка не работает.
Наконец, я заработал, добавив Object типа Integer в объект Properties и проанализировал значение, используя метод intValue класса Integer. Вот код, который я использовал.
Джава:
int intVal = 1;
Properties propObj = new Properties();
propObj.put("KEY_FOR_INT", new Integer(intVal));
C ++:
jobject intObjVal = env->CallObjectMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));
jint intVal = env->CallIntMethod(intObjVal, intValueID);
int myRequiredVal = (int)intVal;