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. 我的第一份vim程序

    vim太好用了吧!!!根本停不下来啊! devc++再见! /*==================================================================== ...

  2. ♫【模式】自定义函数(self-defining function)

    <JavaScript模式> /** * 如果创建了一个新函数并且将其分配给保存了另外函数的同一个变量,那么就以一个新函数覆盖旧函数. * 在某种程度上,回收旧函数指针以指向一个新函数.而 ...

  3. HUD --- 3635

    Five hundred years later, the number of dragon balls will increase unexpectedly, so it's too difficu ...

  4. maya 操作自我整理(二)

    随身携带自己的maya习惯我们在一台电脑上设置好自己的使用习惯,包括自己定义的快捷键.标记菜单.界面颜色.工具架等信息,当换到另一个工作环境时再进行设置十分不便利,将自己的习惯随身带走有利于我们更快捷 ...

  5. git入门超详细(转载)

    转自:http://www.cnblogs.com/tugenhua0707/p/4050072.html Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SV ...

  6. Android学习笔记(六)Fragment的生命周期

    在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期. 一.Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态 ...

  7. UVA 11762 Race to 1(记忆化+期望)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20869 [思路] DP+期望. 设f[x]表示从x转移到1的期望操 ...

  8. Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset

    1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 891  Solved: 590 ...

  9. MVC 5 第二章 项目结构

    通过本章学习,你将了解到一个MVC 5应用程序的项目组成以及项目文件的相关信息,从而更好地架构设计出自己的项目结构. 单从MVC的字面意思我们便能够注意到M-模型, View-视图, Controll ...

  10. 《A First Course in Probability》-chaper3-条件概率和独立性-基本公式

    EX1: 乔伊80%肯定他把失踪的钥匙放在了他外套两个口袋中的一个.他40%确定放在左口袋,40%确定放在右口袋.如果检查了左口袋发现没有找到钥匙,那么钥匙在右口袋的条件概率是多少? 分析:很基本的条 ...