java類封裝成dll


@參考文章1@參考文章2@參考文章3

 

1,建立測試類,注意英文注釋部分,用漢語直接編譯會亂碼

public class Hello {
    //native method is used for call other language procedure
    //if use chinese here then Compile would be gibberish
    public native void printHello();
    
    static{
        System.loadLibrary("HelloWorld");//加載生成的dll文件
    }
    
    public static void main(String[] args) {
        new Hello().printHello();
    }
    
}

 

 

2,編譯

javac Hello.java

3,生成.h文件(.h文件為C語言的頭文件,內含函數聲明、宏定義、結構體定義等內容)

javah Hello

.h文件內容

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Hello
* Method: printHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Hello_printHello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4,編寫HelloWorld.c文件(.c則為C語言的源文件,內含函數實現,變量定義等內容)

#include "jni.h"
#include "Hello.h"
//#include other headers
JNIEXPORT void JNICALL Java_Hello_printHello(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}

注意,jni.h為%JAVA_HOME%\include\jni.h,Hello.h是第3步生成的,Java_Hello_printHello中的Java_Hello_不能去掉

5,下載安裝mingw, 並將其安裝目錄配置到系統環境變量 

mingw_64位最新下載地址:mingw_64位最新版下載地址
該軟件的作用是在windows系統使用gcc和g++命令,對c文件和c++文件進行編譯,生成.o文件, 進而生成.dll文件。64位的只能生成64位的dll文件。若要生成32位的dll文件,請下載32位的mingw.
mingw_32最新版下載地址:mingw_32位最新版下載地址
安裝完后將{minw安裝目錄}\mingw64\bin放到path即可。

安裝成功截圖:

6,成功.o文件(注意HelloWorld.c的路徑和mingw/bin的關系,要保證對應能找到對方)

gcc -c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" HelloWorld.c

7,生成.dll文件(注意事項同6)

gcc -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.o

8,執行java命令, 驗證是否成功。

java Hello

輸出Hello World,成功!

 

示例項目下載:forDll.rar(內含項目、.c\.h\.o\.dll所有文件)

插件mingw64位本人百度雲下載:https://pan.baidu.com/s/12XGJYTYEJp0-bORB_UfRNA

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM