Объявление вашего метода:
class MainJavaClass {
native void JNIMethod(JavaClassParameter object);
}
означает javah должно генерировать предварительное объявление, подобное следующему:
JNIEXPORT void JNICALL Java_MainJavaClass_JNIMethod(JNIEnv* env, jobject mainJavaClass);
В реализации этого у вас естьнесколько вещей, которые нужно сделать:
Найти JavaClassParameter
Использовать FindClass
, который принимает строковое имя:
jclass cls = env->FindClass("JavaClassParameter");
Найти javaMethodTobeCalledInJNI ()
Используйте GetMethodID
, который проверяет класс, имя строки метода и его подпись.Поскольку это пустая функция без аргументов, ее сигнатура просто ()V
:
jmethodID method = env->GetMethodID(cls, "javaMethodTobeCalledInJNI", "()V");
Вызовите javaMethodTobeCalledInJNI ()
Используйте CallVoidMethod
, что требуетэкземпляр объекта, идентификатор метода и любые аргументы (в данном случае ни одного):
env->CallVoidMethod(mainJavaClass, method);
Вы должны проверять NULL-результаты после каждого шага;если вы возвращаете NULL из одной функции JNI и передаете ее другой, вы обычно будете аварийно завершать работу JVM