• cocos2d-x由Jni实现Java与C++打电话给对方


    cocos2d-x由Jni实现Java与C++打电话给对方。


    cocos2d-x与开发商提供一个类JniHelper,提供java与c++之间的互jni解。


    笔者所开发的“史上最坑爹的游戏”项目中使用到了JNI。为此专门定义了一个类JniUtil.


    头文件JniUtil.h中须要引入例如以下两个.h文件:

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


    通过C++调用Java

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

    这样能够降低jni代码。通过Json来传递详细的调用指令。在java那边通过switch来进行区分,然后再通过java去调用详细的方法。

    1 static void callJni(const char * data);

    在JniUtil.cpp文件里例如以下实现:

    01 void JniUtil::callJni(const char *data){
    02      
    03     JniMethodInfo minfo;//定义Jni函数信息结构体
    04     //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
    05     const char * jniClass = "com/xxxx/xxxx/xxxxxxxx";//这里写你所要调用的java代码的类名
    06     bool isHave = JniHelper::getStaticMethodInfo(minfo,jniClass,"callJni","(Ljava/lang/String;)V");//本人在此传递的參数是字符串
    07     if (!isHave) {
    08         CCLog("jni->%s/callJni:此函数不存在", jniClass);
    09     }else{
    10         CCLog("jni->%s/callJni:此函数存在", jniClass);
    11         jstring jdata = minfo.env->NewStringUTF(data);
    12         //调用此函数
    13         minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata);
    14     }
    15     CCLog("jni-java函数运行完成");
    16 }


    Java的实现:

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


    通过Java代码调用C++

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

    在JniUtil.cpp中作例如以下实现:

    1 extern "C"
    2 {
    3     //方法名与java类中的包名+方法名,下面划线连接
    4     void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv*  env, jobject thiz, jint a)
    5     {
    6         //这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1
    7          
    8     }
    9 }
  • 相关阅读:
    selector
    c# word 转pdf 导出失败,因为此功能尚未安装
    Jquery
    Enter
    获取当前地址的参数值
    无法向会话状态服务器发出会话状态请求。
    Ajax 跨域请求
    JsonResult 处理时间格式
    VS2013打开项目提示"Asp.net4.5未在web服务器上注册
    死锁
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4728386.html
Copyright © 2020-2023  润新知