码迷,mamicode.com
首页 > 编程语言 > 详细

Cocos2d-x通过Jni实现C++与Java相互调用

时间:2015-02-10 00:24:03      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

在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相互调用

标签:

原文地址:http://www.cnblogs.com/iakud/p/4282773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!