Я использую 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-класс.
Вы не используете объект для своего класса.
jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
clsBean
это идентификатор класса.
jint val = env->CallIntMethod(clsBean, testmethod);
Второй параметр должен быть объектом, для которого вы вызываете этот метод. Если только вы не измените свой метод на статический.
Тогда вы можете использовать CallStaticIntMethod
Других решений пока нет …