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

    }
    }

  • 相关阅读:
    大数据笔记
    关于服务器编程的笔记
    [转] IPC之管道、FIFO、socketpair
    一些公司链接
    Delphi 通过字符串实例化类
    Delphi根据字符串实例化对象
    Class-reference types 类引用类型--快要失传的技术
    GETCLASS与REGISTERCLASS的应用一例
    Delphi XE增强的RTTI妙用--动态创建包中的窗口类
    Delphi2010的RTTI增强
  • 原文地址:https://www.cnblogs.com/zhujiulunjian/p/6574969.html
Copyright © 2011-2022 走看看