在JNI中获取方法地址



完成后:

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

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

您在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生成的。

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

最新更新