JNI CallIntMethod из C ++ возвращает неправильное значение

Я использую JNI для встраивания некоторых Java-панелей в мое (древнее, VC6) MFC-приложение. Когда я вызываю CallIntMethod для некоторого метода тестирования в Java-классе, я не получаю ожидаемое значение.

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

Мой код выглядит следующим образом:

ДЖАВА:

public int int_test()
{
return 22;
}

C ++:

jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
if (testmethod)
{
// this one gets me some random number
jint val = env->CallIntMethod(clsBean, testmethod);
int a = (int)val;
}

РЕДАКТИРОВАТЬ (относительно ответа от mkaes):

этот

jint val = env->CallIntMethod(clsBean, testmethod);

вызывает этот метод, объявленный в jni.h:

jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
va_list args;
jint result;
va_start(args,methodID);
result = functions->CallIntMethodV(this,obj,methodID,args);
va_end(args);
return result;
}

и заканчивается в вызове к этому:

jint (JNICALL *CallIntMethodV)
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);

так я думал это задание моя ссылка на Java-класс и jmethodID methodID ссылка на функцию для вызова. Извините, но я не понимаю, какой рабочий объект я должен передать, если не ссылку на Java-класс.

1

Решение

Вы не используете объект для своего класса.

jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
clsBean это идентификатор класса.

jint val = env->CallIntMethod(clsBean, testmethod);
Второй параметр должен быть объектом, для которого вы вызываете этот метод. Если только вы не измените свой метод на статический.
Тогда вы можете использовать CallStaticIntMethod

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]