知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
JNI由淺入深_7_c調(diào)用Java方法一
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):53
1、在Java中聲明辦法
<span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.example.jniandroid.service.CFunction * 當java中有中文時,會報編碼GBK弗成映射字符 辦法的調(diào)用,加上-encoding utf-8 * * @author libin * */ public class CFunction { /** * 實如今c瑯綾擎回調(diào)callback辦法 */ public native void callJniNative(); /** * c調(diào)用Java的實例辦法 */ public void callback() { System.out.println("callNative to callback in Java"); } /** * c調(diào)用Java的靜態(tài)辦法 */ public static void callbackStatic() { System.out.println("callNative to callback static in Java"); } }</span>
2、c中調(diào)用Java辦法
2.1 調(diào)用實例辦法
本處所法Java_InstanceMethodCall_nativeMethod的實現(xiàn)演示了在本地代碼中調(diào)用JAVA辦法的兩步:
1、本處所法起首調(diào)用JNI函數(shù)GetMethodID。這個函數(shù)在指定的類中尋找響應的辦法。這個尋找過程是基于辦法描述符的。如不雅辦法不存在,GetMethodID返回NULL。這時,急速大年夜本處所法中返回,并激發(fā)一個NoSuchMethodError缺點。
2、 本處所法經(jīng)由過程調(diào)用CallVoidMethod來調(diào)用返回值為void的實例辦法。
除了CallVoidMethod這個函數(shù)以外,JNI也支撐對返回值為其它類型的辦法的調(diào)用。如不雅你調(diào)用的辦法返回值類型為int,你的本處所法會應用CallIntMethod。類似地,你可聲調(diào)用CallObjectMethod來調(diào)用返回值為java.lang.String、數(shù)組等對象類型的辦法。
2.2 調(diào)用靜態(tài)辦法
靜態(tài)辦法調(diào)用功能的JNI系列函數(shù)中的一個,如:CallStaticVoidMethod,CallStaticBooleanMethod等。
調(diào)用靜態(tài)辦法和調(diào)用實例辦法的JNI函數(shù)有一個很大年夜的不合,前者第二個參數(shù)是類引用,后者是對象實例的引用。
在JAVA拜訪一個靜態(tài)辦法可以經(jīng)由過程類,也可以經(jīng)由過程對象實例。而JNI的規(guī)定是,在本地代碼中回調(diào)JAVA中的靜態(tài)辦法時,必須指定一個類引用才行。
<span style="font-size:14px;">/** * 調(diào)用Java的靜態(tài)辦法和實例辦法 */ JNIEXPORT void JNICALL Java_com_example_jniandroid_service_CFunction_callJniNative( JNIEnv * env, jobject obj) { //調(diào)用靜態(tài)辦法 jclass cls = (*env)->GetObjectClass(env, obj); jmethodID callbackStatic = (*env)->GetStaticMethodID(env, cls, "callbackStatic", "()V"); (*env)->CallStaticVoidMethod(env, cls, callbackStatic); //調(diào)用實例辦法,先要創(chuàng)建一個對象,然后經(jīng)由過程Call<Type>Method辦法進行調(diào)用 jclass instanceFunc = (*env)->FindClass(env, "com/example/jniandroid/service/CFunction"); jmethodID construction_id = (*env)->GetMethodID(env, instanceFunc, "<init>","()V"); jclass mCFunction = (*env)->NewObject(env, instanceFunc, construction_id); jmethodID callback = (*env)->GetMethodID(env,instanceFunc,"callback","()V"); (*env)->CallVoidMethod(env, mCFunction, callback); }</span>
相關案例查看更多
相關閱讀
- 云南小程序公司
- 網(wǎng)站建設選
- 百度人工排名
- 云南旅游網(wǎng)站建設
- 制作一個小程序
- 云南網(wǎng)站建設方法
- 搜索引擎排名
- 云南網(wǎng)站建設首選公司
- 云南網(wǎng)站建設特性
- 汽車報廢系統(tǒng)
- 汽車報廢拆解管理系統(tǒng)
- 云南小程序開發(fā)公司哪家好
- 云南網(wǎng)站建設百度
- 百度小程序公司
- 云南網(wǎng)站建設制作
- 云南小程序設計
- 網(wǎng)站建設公司哪家好
- 云南etc小程序
- 云南做軟件
- 昆明網(wǎng)站制作
- 網(wǎng)站維護
- 文山小程序開發(fā)
- 報廢車拆解回收管理系統(tǒng)
- 云南網(wǎng)站制作哪家好
- 小程序技術
- 英文網(wǎng)站建設公司
- 表單
- 云南小程序開發(fā)課程
- 昆明網(wǎng)站建設公司
- 網(wǎng)站建設高手