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 ...
随机推荐
- Hibernate(二)Hibernate 实例
上篇Hibernate(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优 ...
- mac下的改装人生——关于mc700安装双硬盘以后的win重装问题
宝贝到家~玩了几天,感觉神清气爽~今天正式开始准备工作了哈. 今天早上开了mac的win7系统发现了几个小问题.好吧我承认这个真的是小问题,就是我没有办法能调整屏幕的亮度了.重装了bootcamp依然 ...
- How to disable Eclipse splash
Run eclipse with the -nosplash option.
- hdoj 2199 Can you solve this equation?【浮点型数据二分】
Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- js判断input输入框为空时遇到的问题 弹窗后,光标没有定位到输入框,而是直接执行我的处理页面程序
无论是会员注册还是提交订单,我们都要使用到form表单,此时我们在处理数据时,就要判断用户填写的信息.一次是直接通过js判断input输入框是否没有填信息,然后在后台处理文件中通过过滤字符串后再次判断 ...
- Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
“Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(B ...
- JAVA Web学习篇--Servlet
Servlet由来 做过BS项目的人都知道,浏览器可以依据HTML静态标记语言来显示各式各样的网页.可是假设我们须要在网页上完毕一些业务逻辑:比方登陆验证.或者说网页显示的内容在server的数据库中 ...
- [RxJS] Combination operator: zip
CombineLatest and withLatestFrom are both AND-style combination operators. In this lesson, we will l ...
- android 06 LinearLayout
xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la ...
- linux下ntfs硬盘的加载
问题: # mount –t ntfs /dev/sdb1 /mnt/ mount: unknown filesystem type ‘ntfs’ 这是由于Cent ...