C代码调用Java代码

  • C代码调用Java代码应用场景

    • 复用已经存在的java代码
    • c语言需要给java一些通知
    • c代码不方便实现的逻辑(界面)
  • 反射

    //1.加载类字节码
    Class clazz = Demo.class.getClassLoader().loadClass("com.example.Dialog");
    //2.获取方法
    Method method = clazz.getDeclaredMethod("showDialog",String.class);
    //3.调用方法
    method.invoke(clazz.newInstance(), "德玛西亚");
  • C代码调Java代码步骤

    //1. 加载字节码
    //jclass      (*FindClass)(JNIEnv*, const char*);
    jclass clazz = (*env)->FindClass(env, "cn/loaderman/ccalljava/MainActivity");
    //2. 获取方法id
    //方法签名:唯一确定一个方法  javap -s 包名.类名
    //在bin/class目录中调用命令行
    //jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
    jmethodID methodId = (*env)->GetMethodID(env, clazz, "showDialog", "(Ljava/lang/String;)V");
    //3. 调用方法
    //void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
    (*env)->CallVoidMethod(env, thiz, methodId, (*env)->NewStringUTF(env, "德玛西亚,人在塔在"));
    
     

posted on 2017-02-24 19:52  LoaderMan  阅读(270)  评论(0编辑  收藏  举报

导航