欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

JNI由淺入深_7_c調(diào)用Java方法一 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設/小程序開發(fā)/軟件開發(fā)

知識

不管是網(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>

相關案例查看更多