cocos2dx android 工程 JNI实现C++ Jave相互调用

本文详细介绍了如何在C++与Java之间进行互调用,包括新建cpp函数、增加java函数声明、实现调用流程及最终的调用过程。通过实例展示了在Cocos2d-x框架下,C++函数如何被Java调用,以及Java函数如何调用C++函数,实现了两种语言间的无缝交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一章已经讲了C++调用Java
http://blog.youkuaiyun.com/xiechyun/article/details/44624385
书接上一回,接着说Java调用C++
1.新建cpp函数
2.增加java函数callforcpp声明
3.实现callforcpp函数
4.调用

1.新建cpp函数
在class文件夹下新建文件beCalledFun.h文件,代码如下:

    #ifndef be_Called_Fun_H
    #define be_Called_Fun_H
    #include "cocos2d.h"
    using namespace cocos2d;
    void CalledByJava(const char *tips)
    {
        CCLog("i am cpp function: %s", tips);
    }
    #endif

2.增加java函数声明
打开JavaShow.java文件,在类内声明函数
public static native void CallforCpp(String tips);

3.打开jnitoJava.cpp文件,在内实现CallforCpp,名字有点特别:Java_包名类名函数名

void Java_org_cocos2dx_cpp_JavaShow_CallforCpp(JNIEnv *env, jobject thiz, jstring tips)
    {
        const char * pTips = env->GetStringUTFChars(tips,NULL);
        CalledByJava(pTips);//调用c++函数
        env->ReleaseStringUTFChars(tips,pTips);

    }

函数里调用了C++的函数CalledByJava(pTips),要包含头文件;

#include "../../Classes/beCalledFun.h"

4.调用: C++通过JIN调用java的函数,此java函数内调用c++的CalledByJava。
i)创建jni调用java的函数
在jnitojava.h中声明getTips3函数,代码如下 :

#ifndef __JniToJava_H_
#define __JniToJava_H_
extern "C"
{
    void getTips();
    void getTips2(const char* name);
    void getTips3(const char* tips);
}

#endif

在jnitojava.cpp中实现getTips3函数,代码如下:


    void getTips3(const char* tips)
    {
        JniMethodInfo jinfo;
        if(JniHelper::getStaticMethodInfo(jinfo,CLASS_NAME,"CallforCpp","(Ljava/lang/String;)V"))
        {
            jstring jtips = jinfo.env->NewStringUTF(tips);
            jinfo.env->CallStaticVoidMethod(jinfo.classID,jinfo.methodID,jtips);
        }
    }

然后在工程中调用些函数,
在helloworld.cpp文件中,点击按钮事件

void HelloWorld::menuCloseCallback(Ref* pSender)
{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    getTips();
    getTips2("printf this string");
    getTips3("Cpp call java ,then java call cpp");
#endif

}

连接手机,运行,每次点击关闭按钮都会输出
CALLED: javashow::show1
CALLED: javashow:show2: printf this string
i am cpp function: Cpp call java ,then java call cpp

至此,已经完成了c++调用java,java调用c++的方法。
说得可能有点混乱,

参考http://codingnow.cn/cocos2d-x/992.html

工程class和proj.android打包了发上去可下载
http://download.youkuaiyun.com/detail/xiechyun/8533203

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值