首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 調用固有方法完整實戰:從 javah 生成標頭到 DLL 實現與參數對應規則

     編輯:Java 相關知識

完整開發流程範例

簡單範例:Java 程式調用固有方法,後者調用 Win32 MessageBox() 顯示圖形文字框。非 Win32 平台替換 windows.h 為 stdio.h、MessageBox() 為 printf()。

步驟 1:Java 代碼與靜態載入

編寫固有方法宣告與參數。static 區塊調用 System.loadLibrary("MsgImpl") 載入 DLL 建立連結。DLL 必須在系統路徑或含類別檔目錄。JVM 自動添加平台適當副檔名。

步驟 2:javah 生成 C 標頭檔

編譯 Java 源檔,對 .class 運行 javah -jni ShowMsgBox(必須指定 -jni 參數使用 Java 1.1 JNI)。javah 讀取類別檔,為每個固有方法生成 C/C++ 標頭檔函數原型。輸出包含:jni.h、JNIEXPORT/JNICALL 宏(適配平台導向命令)、JNIEnv/jobject/jstring JNI 資料類型。檔案可由 C/C++ 編譯器編譯。

步驟 3:名稱管理與函數簽名規則

JNI 統一固有方法命名規則,屬於 JVM 連結機制一部分。所有固有方法以「Java」開頭,後接 Java 方法名,底線分隔。方法「過載」時追加函數簽名。註釋中可見原生簽名。

步驟 4:實現 DLL 核心代碼

編寫 C/C++ 源檔包含 javah 生成標頭檔,實作固有方法,編譯連結生成 MsgImpl.dll。核心代碼:DllMain 返回 TRUE;固有方法實作透過 JNIEnv 調用 GetStringUTFChars 取得字串、調用 MessageBox()、釋放字串資源。參數對應:第一參數 JNIEnv 含回調 JVM 掛鉤;第二參數非 static 方法相當 C++ this 指標,static 方法為 Class 物件引用;剩餘參數對應 Java 傳遞物件,主類型按值傳遞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved