java反射-jni-c调用java的方法

1获取字节码对象

java:Class clazz=Utils.class;

//jclass      (*FindClass)(JNIEnv*, const char*);//char* 反射调用的类的路径

jni:jclass claz=(*env)->FindClass(env,"反射调用的类的路径");

2获取method的对象

java:Method md=clazz.getDeclareMethod("test",String.class);

//jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)

jni:jmethodID jid=(*env)->GetMethodID(env,claz,"回调的方法","方法签名");//方法签名通过javap -s "类全名"得到(在bin目录下运行)

3通过字节码对象创建一个object

java:Object obj=clazz.newInstance();

jni:clazz就是object

4通过对象调用方法

java:md.invoke(obj,"方法名");

//void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);

jni:(*env)->CallVoidMethod(env,clazz,jid);

猜你喜欢

转载自blog.csdn.net/fuyinghaha/article/details/89631720