千家信息网

C/C++怎么调用Java不同类中的静态方法

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容主要讲解" C/C++怎么调用Java不同类中的静态方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习" C/C++怎么调用Java不同类中的静态方
千家信息网最后更新 2025年01月31日C/C++怎么调用Java不同类中的静态方法

本篇内容主要讲解" C/C++怎么调用Java不同类中的静态方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习" C/C++怎么调用Java不同类中的静态方法"吧!

前言

上一篇我们介绍了《Android NDK编程(四)--- C/C++调用Java中的方法》,主要是C/C++中调用Java的方法,这一篇我们针对上一篇的内容再延伸说一下,关于调不同类中的静态方法。

代码演示

我们继续接着原来的Demo程序进行处理,首先我们先新建一个类名为VaccaeJNI,然后在这个类里面增加一个native的静态方法。

通过ALT+ENTER在native-lib.cpp中增加了对应的方法函数,然后写实现方法。

最后再我们的按钮事件里调用VaccaeJNI类中的静态方法

运行结果

上面来说我们从java调C/C++的方法其实基本都差不多,下面我们重点要说一下C/C++调用java的方法。

我们在VaccaeJNI中加入一个native的静态方法和一个本地的静态方法。

然后再对应的C++文件中写入实现方法

从上图我们可以看到,调用静态方法的时候我们的GetMethodID和CallMethod方法都加上了static变为GetStaticMethodIDCallStaticIntMethod,如果这里不改变的话,调用时就会报错了。

在按钮事件中我们再写实现方法

相对来说调用静态方法还是比较简单的,我们看一下运行结果


调用不同类中的方法

最后我们要说一下重点,因为我们在写方法的时候可能会调用的是不同类里面的方法,导航native的方法和要调用的java方法不在同一个类里,遇到这样的方法我们来看一看怎么实现。

我们还是在VaccaeJNI的类中写一个非静态的方法,两个数相乘

然后调用的native的函数,我们直接写在Mainactivity.java中

上图中我们先定义了一个plusFromJNI的参数,输入两个值得到返回数,然后先把按钮事件写了调用方法,接下来我们按ALT+ENTER在C++的文件中生成方法

native-lib.cpp

extern "C"JNIEXPORT jint JNICALLJava_dem_vac_vaccaendk_MainActivity_plusFromJNI(JNIEnv *env, jobject instance, jint a, jint b) {
//首先获取class,这里传入的参数jobject是代表了Mainactivity,所以我们要自己查找 jclass jcls=env->FindClass("dem/vac/vaccaendk/VaccaeJNI"); if (jcls == NULL) { return 0; }
//获取方法 jmethodID jmethod = env->GetMethodID(jcls, "Plus", "(II)I"); if(jmethod==NULL) { return 0; }
//调用访法 //第一个参数为jobject的这是传入的是jobject是Mainactivity, //如果在CallIntMethod里面直接用传入的肯定会出错,因为我们的 //方法是在VaccaeJNI的类里面,所以我们首先要实例化那个类,再调用 jobject jobj = env->AllocObject(jcls); return env->CallIntMethod(jobj,jmethod,a,b);

}

上面代码中我们主要要关注几个我写了注释的地方,如下图

最后我们再运行一下程序,看看结果

到此,相信大家对" C/C++怎么调用Java不同类中的静态方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 静态 同类 事件 内容 参数 按钮 结果 运行 两个 代码 函数 文件 时候 程序 要说 还是 重点 C++ 上一 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 售后服务器哪个牌子好 上海网络技术咨询服务报价表 世界变成了一个巨型的数据库 apex华森网络安全 csgo怎么切换到法国服务器 海康监控服务器连不上 海南华为服务器售后点 腾讯云服务器怎么打开虚拟键盘 女人学平面设计好还是软件开发好 数据库工具的作用是什么 幻塔为什么那么多服务器 武汉职业学院计算机网络技术专业 漯河软件开发税务筹划有哪些方法 万方数据库 包库 小旋风asp服务器绿色 学习通计算机网络技术网课 直播服务器占用空间 4g网络技术论文结语 广州网络安全青年主题日 挂机赚钱软件开发 网络安全硕士几年 一梦江湖电脑服务器和手机不一样 陕西测控上位机软件开发 mysql数据库日期如何插入 大众服务器升级什么时候弄好 在厦门用什么地图软件开发 区域网代理服务器怎么打开 网络安全宣讲培训 手机无网络安全证书 机房服务器亮红灯报警声怎么解决
0