cocos2dx JAVA,C++互相调用函数
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++互相调用函数的更多相关文章
- Cocos2d-x java 通过jni调用c++的方法
前面博客说到,cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView) 里面.opengl的渲 ...
- Java -- JDBC 学习--调用函数&存储过程
调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...
- Null作为参数的时候,Java编译器如何调用函数?
public class TestNull { public void method(Object o){ System.out.println("Object Version") ...
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=97 本文目的 要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看 ...
- java下实现调用oracle的存储过程和函数
在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...
- Java调用函数传递参数到底是值传递还是引用传递
今天翻看微信上有关Java技术的公众号时,看到了一篇关于Java中值传递的问题,文章讨论了在Java中调用函数进行传参的时候到底是值传递还是引用传递这个面试时会问到的问题.之前也接触过类似的问题,但只 ...
- 通过Java发射机制调用可变参数函数
1.获取可变参数的函数 获取可变参数的函数与获取参数类型为数组类型一样. clazz.getMethod("test", Object[].class); 其中O ...
- 【学习】java下实现调用oracle的存储过程和函数
在oracle下创建一个test的账户,然后按一下步骤执行: 1.创建表:STOCK_PRICES --创建表格CREATETABLE STOCK_PRICES( RIC VARCHAR(6) PRI ...
- 第39篇-Java通过JNI调用C/C++函数
在某些情况下,Java语言需要通过调用C/C++函数来实现某些功能,因为Java有时候对这些功能显的无能为力,如想使用X86_64 的 SIMD 指令提升一下业务方法中关键代码的性能,又或者想要获取某 ...
- java 代码调用函数
sql 中调用函数 getDistance(lng1 float, lat1 float, lng2 float, lat2 float) 例如: SELECT id, f_seller_id sel ...
随机推荐
- UC全屏
UC浏览器U3内核扩展接口定义
- 字符串(后缀自动机):Ahoi2013 差异
Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Output 54 HINT 2<=N< ...
- window.alert弹出处理
# -*- coding:utf-8 -*- """ window.alert 处理 """ from selenium import we ...
- 使用doxygen生成注释文档
1. doxygen下载地址:http://www.stack.nl/~dimitri/doxygen/ 2. 参考http://wenku.baidu.com/link?url=ETvBUyaR9f ...
- 【转】Word中使用Endnote很卡解决方案
[转自]:http://blog.sina.com.cn/s/blog_4aee288a0101cxwb.html 文件→选项→校对→在word中更正拼写和语法时→键入时标记语法错误. 取消这个选项, ...
- OC语言中类目,延展,协议
一.类目 指向已知的类中添加新方法,不破坏封装性.已知类可以是自定义的类和系统的类. 1.类目的实现和声明 建一个学生类,并增加类目 (1).声明(是在Student+Working.h中) 必须引入 ...
- ubuntu14.04 wps字体缺失问题
字体 下载安装字体即可
- Java程序员必知的8大排序算法
8种排序之间的关系 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的.如 ...
- 【设计模式 - 17】之中介者模式(Mediator)
1 模式简介 中介者模式的定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显式地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介者模式中的组成部分: 1. ...
- CSS3动画变形Animations
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...