【詳解】JNI (Java Native Interface) (四)

貓毛·波拿巴發表於2018-10-26

案例四:回撥例項方法與靜態方法

描述:此案例將通過Java呼叫的C語言程式碼回撥Java方法。

要想呼叫例項物件的方法,需要進行以下步驟:

1. 通過物件例項,獲取到物件類的引用  => GetObjectClass()

2. 通過類引用,獲取到方法ID  => GetMethodID() 

 需要提供方法名,和方法簽名。也就是需要這兩個資訊來標識確定一個方法。

   方法簽名格式:引數列表返回值型別。 

 例如: ()V或(Ljava/lang/String;)V等等。這裡的所說的型別表示與案例三相同

    你可以通過javap命令工具,檢視方法的簽名。例如,以下是下面例子的方法簽名(描述)。

 

3. 基於方法ID,你可以根據返回值型別,呼叫Call<基本型別>Method()或者CallVoidMethod()或CallObjectMethod(),來呼叫對應的方法。

本例所有生成的檔案如下:

 

(一)編寫Java程式碼

 

(二)編譯Java程式碼,並生成標頭檔案

(3)編寫C程式碼實現

(4)編譯C程式碼生成動態連結庫,libdemo4.so

(5)執行Java程式碼

由此,可知Java回撥方法已被正確呼叫

 

相關文章