zoukankan      html  css  js  c++  java
  • cocos2dx jni

    头文件JniUtil.h中需要引入如下两个.h文件:

    #include <jni.h>
    #include "platform/android/jni/JniHelper.h"

    通过C++调用Java

    声明一个函数,专门用于处理从C++调用Java的方法,所有调用Java的地方都走这个函数。

    这样可以减少jni代码,通过Json来传递具体的调用指令,在java那边通过switch来进行区分,然后再通过java去调用具体的方法。

    static void callJni(const char * data);

    在JniUtil.cpp文件中如下实现:

    void JniUtil::callJni(const char *data){

    JniMethodInfo minfo;//定义Jni函数信息结构体
    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
    const char * jniClass = "com/xxxx/xxxx/xxxxxxxx";//这里写你所要调用的java代码的类名
    bool isHave = JniHelper::getStaticMethodInfo(minfo,jniClass,"callJni","(Ljava/lang/String;)V");//本人在此传递的参数是字符串
    if (!isHave) {
    CCLog("jni->%s/callJni:此函数不存在", jniClass);
    }else{
    CCLog("jni->%s/callJni:此函数存在", jniClass);
    jstring jdata = minfo.env->NewStringUTF(data);
    //调用此函数
    minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata);
    }
    CCLog("jni-java函数执行完毕");
    }

    Java的实现:

    public static void callJni(final String data) {
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    //这里处理C++传递过来的数据
    }
    }, 100);
    }

    通过Java代码调用C++

    //在java类中定义一个方法,用于提供给java调用C++
    private static native void xxxxxx(int value);

    在JniUtil.cpp中作如下实现:

    extern "C"
    {
    //方法名与java类中的包名+方法名,以下划线连接
    void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv* env, jobject thiz, jint a)
    {
    //这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1

    }
    }

  • 相关阅读:
    sql server 查看锁表SQL【转】
    在cxGrid表格中如何获得当前列的字段名
    获取cxgrid footer内容
    gulp学习总结
    前端入门应该掌握的html+css知识点
    前端知识回顾
    this、apply/call、bind、闭包、函数、变量复制
    三角形的实现方法(马)
    webpack学习总结(一)
    使用模板引擎artTemplate的几个问题总结
  • 原文地址:https://www.cnblogs.com/zhujiulunjian/p/6574969.html
Copyright © 2011-2022 走看看