Cocos2d-x通过Jni实现C++与Java相互调用
在cocos2dx项目中与运营平台(java sdk)对接时使用了JNI。
通过C++调用Java
在JniUtil.h文件中如下实现:
#ifndef _JNIUTIL_H_
#define _JNIUTIL_H_ class JniUtil
{
public:
void static login(const char* zoneId, const char* zoneName);
}; #endif // _JNIUTIL_H_
在JniUtil.cpp文件中如下实现:
#include "JniUtil.h" #include <jni.h>
#include "platform/android/jni/JniHelper.h" void JniUtil::login(const char* zoneId, const char* zoneName)
{
JniMethodInfo minfo;
if (JniHelper::getStaticMethodInfo(minfo,
"com/platform/test/JniUtil",
"login",
"(Ljava/lang/String;Ljava/lang/String;)V"))
{
jstring jzoneId = minfo.env->NewStringUTF(zoneId);
jstring jzoneName = minfo.env->NewStringUTF(zoneName);
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, jzoneId, jzoneName); minfo.env->DeleteLocalRef(minfo.classID);
minfo.env->DeleteLocalRef(jzoneId);
minfo.env->DeleteLocalRef(jzoneName);
}
}
Java的实现:
package com.platform.test;
public class JniUtil {
private static void login(String zoneId, String zoneName) {
// do
}
}
通过Java调用C++
在java的JniUtil类中定义一个方法,用于提供给java调用C++:
package com.platform.test;
public class JniUtil {
public static native void onLogin(String result);
}
在JniUtil.cpp文件中如下实现:
方法名与java类中的包名+方法名,以下划线连接
extern "C"
{
void Java_com_platform_test_JniUtil_onLogin(JNIEnv* env, jobject thiz, jint jresult)
{
const char* result = env->GetStringUTFChars(jresult, NULL);
CCLOG("onLogin : %s", result);
env->ReleaseStringUTFChars(jresult, result);
}
}
一看就明白怎么调用,不过多解释
Cocos2d-x通过Jni实现C++与Java相互调用的更多相关文章
- R语言- 实验报告 - 利用R语言脚本与Java相互调用
一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...
- JNI编程(二) —— 让C++和Java相互调用(2)
3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRa ...
- JNI编程(二) —— 让C++和Java相互调用(1)
自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...
- cocos2d JS-(JavaScript) 基础语法间的函数方法相互调用
1.函数嵌套函数 function calcuate(opr, a, b) { // 定义函数,opr - -> 符号,a,b - -> 数值 //定义 + 函数 function add ...
- Java如何调用C语言程序,JNI技术
Java为什么要调用C语言编写的程序因为涉及操作系统底层的事件,Java是处理不了的,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流,这个事Java就做不了,只能交给C语 ...
- .Net 与 Java 的服务接口相互调用
本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...
- cocos2d 中使用jni C++ 调用 Java 方法
1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...
- cocos2d 中使用jni Java 调用 C++ 方法
1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...
- Jni中C++和Java的参数传递 参数对照
Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用V ...
随机推荐
- 解决 AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]
页面报错: ConnectionException In AbstractConnection.php line 155 AUTH` failed: ERR Client sent AUTH, but ...
- 原生js如何获取某一元素的高度
三种方法: 1.document.getElementById("id").style.height,这种方法的前提是必须之前已经显示的在css中声明过height,才能取得正确的 ...
- twentytwenty插件,图片对比轮播
https://zurb.com/playground/twentytwenty 项目应用 http://decortrim.mml.digital/
- Kotlin Doc
{ https://www.runoob.com/kotlin/kotlin-eclipse-setup.html }
- 2018阿里云云数据库RDS核心能力演进
摘要: 2018年云数据库RDS发展上,不但针对MySQL.SQL Server.PostgreSQL提供了适合个人入门用户的基础版产品,以实惠的价格普惠广大中小用户.更加入最新的MariaDB TX ...
- 帝国cms把文章加入到收藏夹代码
内容模板加这个:<a href="[!--news.url--]e/member/fava/add/?classid=[!--classid--]&id=[!--id--]&q ...
- bzoj1031题解
[解题思路] 将原串复制一份拼接到原串后作为处理串,可以对处理串的前一半后缀排序,即可得出顺序.复杂度O(Llog2L). [参考代码] 也是naive的时候写的..后缀数组居然是用桶排求的.. #p ...
- NX二次开发-UFUN获取直线的两个端点UF_CURVE_ask_line_data
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_ui.h> UF_initialize(); ...
- [DataContract]引用
项目->右键->添加引用->找到System.Runtime.Serialization 添加之
- 2019 HDU 多校赛第二场 HDU 6598 Harmonious Army 构造最小割模型
题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你 ...