0

完成后:

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

如何获得运行地址,以便将函数指针作为参数传递给 C 函数?也许某个jmethodID领域?我无法在 jni 文档中找到它。谢谢。

4

2 回答 2

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

于 2012-07-23T01:08:38.113 回答
0

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

于 2012-07-23T01:44:18.847 回答