C++调用JAVA 例子

 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
 #include "platform/android/jni/JniHelper.h"

 int KuNiuLogin(lua_State *lua)
 {
     JniMethodInfo methodInfo;
     auto isOk = JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/cpp/AppActivity", "sdkLogin", "()V");
     if (isOk)
     {
         auto activityObj = methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
     }
     ;
 }
 #endif

前提假设:

  有这么一个java文件.

  org/cocos2dx/cpp/AppActivity.java

  这个类有一个sdkLogin的静态共有函数.

  class AppActivity {

    public static void sdkLogin() {}

  };

我们需要通过C++调用上面的JAVA函数 sdkLogin.

JniHelper.h 是cocos2dx引擎自带操作java的头文件, 它在Windows平台不起作用.

如果你需要vs的语法提示, 你可以把它写在条件编译外面,

这么做会报错, 因为里面包含了jni.h文件, 这个文件在java虚拟机安装目录可以找到,

放到vs include目录即可.

JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/cpp/AppActivity", "sdkLogin", "()V");

第一个参数是一个JniMethodInfo类型的参数.

第二个参数指定java文件的路径,

第三个参数是函数名,

第四个参数是参数签名. (google有更详细的签名解释).

返回true表示获取函数成功.

于是

auto activityObj = methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);

这行就是调用了...

JAVA调用C++例子.

 extern "C" {
 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
     void Java_org_cocos2dx_cpp_JniTestHelper_KuNiuLogin(JNIEnv *env, jobject thiz, jstring jstr)
     {
         auto strOpenId = env->GetStringUTFChars(jstr, NULL);
         env->ReleaseStringUTFChars(jstr, strOpenId);
     }
 #endif
 }

注意这个函数的命名.

  Java 前缀.

  org_cocos2dx_cpp 包名.

  JniTestHelper 类名.

  KuNiuLogin 函数名.

参数:

  前两个参数是必须的, 具体用处google有..

  后面的参数填自己需要的, 注意类型.

  在函数内部获取参数的时候, 要通过以上方法获取.

JAVA只要建一个类, 命名为 JniTestHelper,

定义函数 KuNiuLogin, 这个函数必须按照NDK的约定定义.

public static native void KuNiuLogin(String openId);

  native 前缀必须要加, 这个函数在JAVA中无需实现, 自动映射C++函数.

使用的时候直接 JniTestHelper.KuNiuLogin(""); 就可以了.

cocos2dx JAVA,C++互相调用函数的更多相关文章

  1. Cocos2d-x java 通过jni调用c++的方法

    前面博客说到,cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView) 里面.opengl的渲 ...

  2. Java -- JDBC 学习--调用函数&存储过程

    调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...

  3. Null作为参数的时候,Java编译器如何调用函数?

    public class TestNull { public void method(Object o){ System.out.println("Object Version") ...

  4. 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97 本文目的 要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看 ...

  5. java下实现调用oracle的存储过程和函数

    在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...

  6. Java调用函数传递参数到底是值传递还是引用传递

    今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只 ...

  7. 通过Java发射机制调用可变参数函数

    1.获取可变参数的函数       获取可变参数的函数与获取参数类型为数组类型一样. clazz.getMethod("test", Object[].class);    其中O ...

  8. 【学习】java下实现调用oracle的存储过程和函数

    在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...

  9. 第39篇-Java通过JNI调用C/C++函数

    在某些情况下,Java语言需要通过调用C/C++函数来实现某些功能,因为Java有时候对这些功能显的无能为力,如想使用X86_64 的 SIMD 指令提升一下业务方法中关键代码的性能,又或者想要获取某 ...

  10. java 代码调用函数

    sql 中调用函数 getDistance(lng1 float, lat1 float, lng2 float, lat2 float) 例如: SELECT id, f_seller_id sel ...

随机推荐

  1. 一起啃PRML - Preface 前言

    一起啃PRML - 前言 Preface @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ PRML,Pattern Recognition and M ...

  2. [FJSC2014]折线统计

    [题目描述] 二维平面上有n 个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x 坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1->2 ...

  3. (转载)在vmware中简单配置vsftpd服务器

    (转载)http://blog.chinaunix.net/uid-7453676-id-2625582.html 分类: LINUX 一 试验的前期环境搭建   系统环境:Fedora 2   软件 ...

  4. POJ 1503 Integer Inquiry 简单大数相加

    Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his explo ...

  5. JavaScript高级程序设计21.pdf

    第10章 DOM DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口) IE中所有DOM对象都是以COM对象的形式实现的,这意味着IE中的对象与原生JavaScript对象 ...

  6. XML文档部署到Tomcat服务器上总是加载出错

    config.xnl 起初文档路径是在src/Dao/config.xml 在Dao目录下BaseDao类中,解析config.xml文件路径 path="/Dao/config.xml&q ...

  7. html/php, 二个文本框求和,在第三个框中显示

    我想要实现的是第三个文本框本来输出的是默认值,按了提交按钮之后,显示了一个我通过php某个计算后想要输出的值,如何实现?就好比说:我输入两个数,我按了个提交按钮之后,那个第三个文本框本来输出是“输出框 ...

  8. php写excel

    $this->loadexcel();        $objPHPExcel = new PHPExcel();        $objPHPExcel->getProperties() ...

  9. 《A First Course in Probability》-chaper3-条件概率和独立性-P(·|F)是概率

    条件概率中的三个命题: 下面我们分条来解读一下这三个命题.

  10. lightoj1051 Good and Bad (dp)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1051 题目大意:给你一个字符串,只包含大写字母和‘?’,如果字符串中出现了连续三个以上 ...