jni 利用委託調java方法(第一篇)
阿新 • • 發佈:2018-12-10
jni程式碼:
extern "C" JNIEXPORT void JNICALL Java_com_ipcamer_testsetdata_HelloWorld_sayHello(JNIEnv *env, jobject obj) { jclass helloworld_clazz = env->GetObjectClass(obj); jfieldID id_p = env->GetFieldID(helloworld_clazz, "p", "Lcom/ipcamer/testsetdata/Father;"); jobject p = env->GetObjectField(obj, id_p); jclass clazz_Father = env->FindClass("com/ipcamer/testsetdata/Father"); jmethodID id_Father_function = env->GetMethodID(clazz_Father, "function", "()V"); env->CallVoidMethod(p, id_Father_function); }
java程式碼:
package com.ipcamer.testsetdata; /** * Created by zhu on 2018/9/18. */ public class Father { public void function(){ System.out.println("father..."); } }
package com.ipcamer.testsetdata; /** * Created by zhu on 2018/9/18. */ public class Child extends Father { @Override public void function() { System.out.println("child..."); } }
package com.ipcamer.testsetdata; /** * Created by zhu on 2018/9/18. */ public class HelloWorld { public native void sayHello();// 本地方法宣告。 //試圖用子類的例項去執行父類被覆蓋的方法 Father p = new Child(); }