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

  介绍

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

<节>

<强>前言

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

<引用类=癹s_blockquote_wrap”数据类型=?”data-url=" data-author-name=" " data-content-utf8-length=?”data-source-title=" "> <节> <节> <强>代码演示   ,

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

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

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

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

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

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

运行结果

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

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

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

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

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

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

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

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

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

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

<人力资源/>

<强>调用不同类中的方法

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

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

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

然后调用的本地的函数,我们直接写在Mainactivity。java中

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

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

native-lib。cpp

<节>
 <代码>走读生“C"  <代码> JNIEXPORT jint JNICALL  <代码> Java_dem_vac_vaccaendk_MainActivity_plusFromJNI (JNIEnv * env, jobject实例,jint jint b){ <代码> 
<代码>,,//首先获取类,这里传入的参数jobject是代表了Mainactivity,所以我们要自己查找 <代码>,,jclass jcl=env→FindClass(“民主党/休假/vaccaendk/VaccaeJNI"); <代码>,,如果(jcl==NULL){ <代码>,,,代码,返回0; <代码>,代码,} <代码>
<代码>,,//获取方法 <代码>,,jmethodID jmethod=env→GetMethodID (jcl,“Plus"“; (II)我), <代码>,,如果(jmethod==NULL){ <代码>,,,代码,返回0; <代码>,代码,} <代码>
<代码>,,//调用访法 <代码>,//第,一个参数为jobject的这是传入的是jobject是Mainactivity, <代码>,,//如果在CallIntMethod里面直接用传入的肯定会出错,因为我们的

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