在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相互调用的更多相关文章

  1. R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...

  2. JNI编程(二) —— 让C++和Java相互调用(2)

    3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRa ...

  3. JNI编程(二) —— 让C++和Java相互调用(1)

    自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...

  4. cocos2d JS-(JavaScript) 基础语法间的函数方法相互调用

    1.函数嵌套函数 function calcuate(opr, a, b) { // 定义函数,opr - -> 符号,a,b - -> 数值 //定义 + 函数 function add ...

  5. Java如何调用C语言程序,JNI技术

    Java为什么要调用C语言编写的程序因为涉及操作系统底层的事件,Java是处理不了的,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流,这个事Java就做不了,只能交给C语 ...

  6. .Net 与 Java 的服务接口相互调用

    本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...

  7. cocos2d 中使用jni C++ 调用 Java 方法

    1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...

  8. cocos2d 中使用jni Java 调用 C++ 方法

    1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...

  9. Jni中C++和Java的参数传递 参数对照

    Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用V ...

随机推荐

  1. Dart编程循环

    有时,某些指令需要重复执行.循环是一种理想的方法.循环表示必须重复的一组指令.在循环的上下文中,重复被称为迭代 . 下图说明了循环的分类 让我们开始讨论确定循环.迭代次数是确定/固定的循环称为确定循环 ...

  2. mui与springMVC前后端分离

    这个小dome简单来说的前后端分离,通过跨域调用接口来显示数据. 前端用到mui框架,主要来显示数据. 后端用到Java的springMVC,restful服务来做增删改查管理, 这里主要实现动态显示 ...

  3. bzoj1059题解

    [解题思路] 因为只要验证可行性,所以考虑行和考虑列是等价的,故我们只考虑行的交换操作. 这样,拆一波点,把每一行拆成两个点,左边为原交换行,右边为目标交换行,原问题等价于能否对这个二分图进行完全匹配 ...

  4. vue-cli整合axios的几种方法

    Vue这个框架现在在单页面应用方面非常受人欢迎. 基于vue-cli创建的项目怎么样才能更好地处理网络请求? 首选的应该就是axios了 这次给刚接触vue的新手介绍一下axios在vue中如何使用 ...

  5. docker 环境搭建步骤

    配置CA: zhaoweipeng@bogon:~$ ls106 baseos.tar fabric-sdk fabric-sdk (1).tar fixture_106zhaoweipeng@bog ...

  6. Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT

    1.      检查内存可用性 在驱动程序开发中,对内存的操作要格外小心.如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃. DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的 ...

  7. LeetCode 596. Classes More Than 5 Students (超过5名学生的课)

    题目标签: 题目给了我们 courses 表格,让我们找到 一个有至少5名学生的班级. 利用group by 把班级分类,在用Having count 来判断是否有5名,注意这里还需要用 distin ...

  8. hash值的计算与转换 分类: ACM TYPE 2015-05-07 17:49 36人阅读 评论(0) 收藏

    #include <bits/stdc++.h> using namespace std; const int MAXN = 100; const int X = 3; long long ...

  9. 剑指offer——35二叉树的后序遍历

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   题解: 这道题,一开始以为将后序遍历排序后的得 ...

  10. Mybatis 使用的 9 种设计模式,真是太有用了~

    Java技术栈 ) {      name = fullname.substring(0, delim);      children = fullname.substring(delim + 1); ...