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()自体を呼び出して、ジョブジェクトとmethodIDをなんらかの方法で保存する必要があります。

于 2012-07-23T01:44:18.847 に答える