中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C/C++怎么調用Java不同類中的靜態方法

發布時間:2021-07-16 01:23:29 來源:億速云 閱讀:273 作者:chen 欄目:大數據

本篇內容主要講解“ C/C++怎么調用Java不同類中的靜態方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ C/C++怎么調用Java不同類中的靜態方法”吧!

前言

上一篇我們介紹了《Android NDK編程(四)--- C/C++調用Java中的方法》,主要是C/C++中調用Java的方法,這一篇我們針對上一篇的內容再延伸說一下,關于調不同類中的靜態方法。

代碼演示  

我們繼續接著原來的Demo程序進行處理,首先我們先新建一個類名為VaccaeJNI,然后在這個類里面增加一個native的靜態方法。

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中加入一個native的靜態方法和一個本地的靜態方法。

C/C++怎么調用Java不同類中的靜態方法

然后再對應的C++文件中寫入實現方法

從上圖我們可以看到,調用靜態方法的時候我們的GetMethodID和CallMethod方法都加上了static變為GetStaticMethodIDCallStaticIntMethod,如果這里不改變的話,調用時就會報錯了。

在按鈕事件中我們再寫實現方法

C/C++怎么調用Java不同類中的靜態方法

相對來說調用靜態方法還是比較簡單的,我們看一下運行結果

C/C++怎么調用Java不同類中的靜態方法


調用不同類中的方法

最后我們要說一下重點,因為我們在寫方法的時候可能會調用的是不同類里面的方法,導航native的方法和要調用的java方法不在同一個類里,遇到這樣的方法我們來看一看怎么實現。

我們還是在VaccaeJNI的類中寫一個非靜態的方法,兩個數相乘

C/C++怎么調用Java不同類中的靜態方法

然后調用的native的函數,我們直接寫在Mainactivity.java中

C/C++怎么調用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/C++怎么調用Java不同類中的靜態方法

到此,相信大家對“ C/C++怎么調用Java不同類中的靜態方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

章丘市| 调兵山市| 庄浪县| 湟源县| 贺兰县| 静乐县| 伊宁市| 淮北市| 康乐县| 广丰县| 渭南市| 肥东县| 固始县| 罗平县| 桃园县| 泉州市| 通许县| 纳雍县| 黄平县| 麻江县| 巧家县| 四子王旗| 霍山县| 诸暨市| 和林格尔县| 农安县| 长春市| 安西县| 威海市| 呼图壁县| 社旗县| 方山县| 南溪县| 阿拉善右旗| 绥化市| 屏东县| 营口市| 资兴市| 扎鲁特旗| 工布江达县| 铁力市|