在JNI中获取方法地址

时间:2012-07-22 21:52:23

标签: java java-native-interface

完成后:

jmethodID mid = (*env)->GetMethodID(env, cls, "run", "()V");

如何获取运行地址,以便将函数指针作为参数传递给C函数?也许有些jmethodID字段?我无法在jni文档中找到它。感谢。

2 个答案:

答案 0 :(得分:1)

您在C / C ++中填充的方法如下所示:

#include "MyTest.h"

JNIEXPORT void JNICALL 
 Java_InstanceMethodCall_nativeMethod(JNIEnv *env, jobject obj)
 {
     jclass cls = (*env)->GetObjectClass(env, obj);
     jmethodID mid = (*env)->GetMethodID(env, cls, "run", "()V");
     (*env)->CallVoidMethod(env, obj, mid);
 }

使用javah生成签名。

答案 1 :(得分:0)

你做不到。您必须使用CallXXXMethod()系列API。这就是他们的目的。如果你不能打扰想要一个函数指针的代码,你必须自己在C中编写回调并让它调用CallXXXMethod()本身,以某种方式保存jobject和methodID。