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

JNI 入門:Java 調用本地 C++ 動態庫完整步驟

     編輯:Java 相關知識

JNI 五步走

Step 1:編寫 Java 類聲明 native 方法

public class JNITest {
    static { System.loadLibrary("JNITest"); }  // 加載 JNITest.dll / libJNITest.so
    
    public native void showMessageBox();  // 本地方法聲明
    
    public static void main(String[] args) {
        new JNITest().showMessageBox();
    }
}

編譯:javac JNITest.java → 生成 JNITest.class

Step 2:生成 C/C++ 頭文件

命令:javah JNITest → 生成 JNITest.h

/* DO NOT EDIT - machine generated */
#include 
#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_JNITest_showMessageBox(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

Step 3:編寫本地實現

// JNITest.cpp
#include "JNITest.h"
#include 

JNIEXPORT void JNICALL Java_JNITest_showMessageBox(JNIEnv *, jobject) {
    ::MessageBox(NULL, "This is a JNI test", "JNI", MB_OK);
}

Step 4:編譯為動態庫

VC6 命令:

cl -I"f:\jdk\include" -I"f:\jdk\include\win32" -LD JNITest.cpp user32.lib -FeJNITest.dll
  • -I:指定 JDK 頭文件路徑
  • -LD:生成 DLL
  • user32.lib:鏈接 Windows API
  • -Fe:指定輸出文件名

Step 5:運行驗證

命令:java JNITest → 彈出 Windows 消息框,JNI 調用成功。

關鍵點總結

  • 方法名規範:Java_類全名_方法名(包名用下劃線分隔)
  • JNIEnv*:JNI 環境指針,提供大量 Java 物件操作 API
  • jobject:調用對象實例(非靜態方法為 this,靜態方法為 Class 對象)
  • 異常處理:本地代碼拋出異常需用 JNI API 拋回 Java
  • 性能考量:JNI 調用有開銷,高頻調用需謹慎
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved