cocos2d-x c++调用java以及java调用c++

3 篇文章 0 订阅
2 篇文章 0 订阅
用C++调用android里边的方法也就是Java里的方法的话必须借助于JNI的力量才能完成,调用可以分为两大类方法,分别为静态方法调用和非静态方法调用,非静态方法不同于静态方法的地方是调用非静态方法则必须先得到这个方法所在类的实例然后对这个方法再发起调用简单举个例子
Java代码如下:(注这些方法都是凭空写出来的,不能拿来直接用看明白意思自己去试验这样自己吸收的更快

//把包名定为com.test接下来你会看到包名的用法
class A{
     public static void methodA(){
          //do something here
     }

     public void methodB(){
          //do something here     
     }

     public static void methodA_Param(int a){
          //this  is a static method with a parameter
     }

     public void methodB_Param(int b){
          //this is a non-static method with none parameter
     }
}

C++代码如下:
 JniMethodInfo mMethodInfo;// 定义 Jni 函数信息结构体     //getStaticMethodInfo 次函数返回一个 bool 值表示是否找到此函数     bool isFindMethodInfo= JniHelper::getStaticMethodInfo(mMethodInfo,"com/test/A"," methodA ", “()V");
    if (isFindMethodInfo) {
        mMethodInfo.env->CallStaticVoidMethod(mMethodInfo.classID, mMethodInfo.methodID);
    }
    以上部分是使用c++调用java中的静态方法
    //如果需要有返回值那必须修改获取方法的部分
    如下:(标红的部分则是不同的地方了)
     JniMethodInfo mMethodInfo;// 定义 Jni 函数信息结构体
    //getStaticMethodInfo  次函数返回一个 bool 值表示是否找到此函数     bool isFindMethodInfo= JniHelper::getStaticMethodInfo(mMethodInfo,"com/test/A"," methodA ”, 
“() Ljava/lang/Object; ”);
     jobject jobj;
    if (isFindMethodInfo) {
        jobj =  mMethodInfo.env->CallStatic Object Method(mMethodInfo.classID, mMethodInfo.methodID);
    }

       调用非静态方法的实例我这里就不列出了,还有java调用C++得部分也不列出了,demo里都有,注释都会很详尽的,之后我会给出一个详尽的demo给大家,需要注意的地方我上边已经写明白了,如果还有其他不太明白的可以直接发邮件或qq联系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值