java載入dll動態庫,js調用dll動態鏈接庫

本文目錄一覽:

java調用DLL動態庫

1、總體說明:實現一個函數,傳入整形數i,返回值i*i,這個函數做在DLL中,java將通過JNI調用這個函數,傳入一個參數,得到返回值。

確定DLL的名稱為calldll.dll,函數shanfei(int i)。2、編寫java程序javacall.java,如下:public class javacall

{

static

{

System.loadLibrary(“calldll”);

}

public native static int shanfei(int i);

public static void main(String[] args)

{

javacall jc = new javacall();

int j;

j = jc.shanfei(4);

System.out.println(j);

}

}3、編譯javac javacall.java4、生成頭文件javah -jni javacall

生成javacall.h文件5、製作VC++動態庫建立新DLL工程,程序中添加:#include “javacall.h”

JNIEXPORT jint JNICALL Java_javacall_shanfei (JNIEnv *, jclass, jint p)

{

int j = p*p;

return j;

}別忘了將javacall.h複製到VC工程目錄中,然後編譯,如果編譯說找不到jni.h文件,可以將jni.h複製到工程目錄中,還可將javacall.h文件中的#include jni.h改為#include “jni.h”,再編譯。

編譯生成DLL文件如「test.dll」,名稱與System.loadLibrary(“test”)中的名稱一致

vc的編譯辦法:cl -I%java_home%include -I%java_home%includewin32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll

最後在運行時加參數-Djava.library.path=[dll寄存的路徑]

相關的主題文章: 6、java調用將生成的calldll.dll文件複製到javacall.java所在的目錄中,運行java javacall,應該可以看到運行結果。

java如何載入多個C動態庫的dll

啟動函數里設置 -Djava.library.path=”路徑”

Widndows下多個路徑請用;隔開,這個dll必須使用JNI技術編譯的。

假設DLl.dll

你只需要在程序里寫上System.loadLibrary(“DLL”);

java載入dll文件

java沒法直接讀,只能先用C++寫一個讀取該dll內容的過程,按JNI規範封裝成dll,然後java載入這個dll執行其中的函數。

eclipse中的java工程項目如何引用外部jar包和dll動態鏈接庫

1、引用jar包

絕對路徑引用:右鍵工程–properties–Java Build Path–Libraries–Add external JARs… ,在彈出的對話框中選擇要引入的jar包,OK即可。

相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的jar包放入其中,然後右鍵工程–properties–Java Build Path–Libraries–Add JARs… ,在彈出的對話框中選擇libs文件夾下的jar包即可。

2、引用dll動態鏈接庫

絕對路徑引用:右鍵工程–properties–java Build Path–Source,點開工程,選擇Native libraries location….,點擊右側的edit..–external Folder…,選擇要引入的dll文件所在文件夾即可。

相對路徑引用:首先在工程目錄下,新建一個libs文件夾,將要導入的dll文件包放入其中,右鍵工程–properties–java Build Path–Source,點開工程,選擇Native libraries location….,點擊右側的edit..–Workspace..,選擇libs文件夾即可。

java 讀取DLL 咋弄?

一、建立java文件

注意點:1.要對dll裡面的方法做本地聲明

2.載入dll

示例代碼:

public class testdll {

static{

System.loadLibrary(“goodluck”); //注意:不寫擴展名,名字要與dll的文件名一致

}

public native int getValue();

public native void setValue(int i); /**

* @param args

*/

public static void main(String[] args) {

testdll test=new testdll();

test.setValue(10);

System.out.println(test.getValue());

}

}

二、編譯

javac testdll.java ——如果沒有錯,進行下一步

javah testdll ——生成testdll.h這個頭文件

三、實現步驟一中聲明的方法

打開VC++6.0,建立一個dll空工程,把testdll.h導入工程中,新建一個test.cpp源文件

打開testdll.h,發現裡面有兩個方法:

/*

* Class: testdll

* Method: getValue

* Signature: ()I

*/

JNIEXPORT jint JNICALL Java_testdll_getValue

(JNIEnv *, jobject);/*

* Class: testdll

* Method: setValue

* Signature: (I)V

*/

JNIEXPORT void JNICALL Java_testdll_setValue

(JNIEnv *, jobject, jint);

JNIEXPORT不用管,第二個單詞jint/void是返回值,jint相當於int類型,JNICALL不用管,每一個方法名前都有前綴Java_testll_,前兩個參數JNIEnv *和jobject不用管,第二個方法的第三個參數jint就是java文件里的int i。

上面有聲明了,現在就要實現這兩個方法,把代碼補充進來吧:)

示例代碼:

#include “testdll.h”

int i=0;

JNIEXPORT jint JNICALL Java_testdll_getValue

(JNIEnv *, jobject){

return i;

}

JNIEXPORT void JNICALL Java_testdll_setValue

(JNIEnv *, jobject, jint j){

i=j;

}

四、編譯

此時編譯會出現error,主要是提示找不到jni.h(這個包含在testdll.h)里,需要我們把jni.h、jni_md.h複製到C:\Program Files\Microsoft Visual Studio\VC98\Include這個目錄里(默認安裝目錄,如果安裝VC不是這個目錄,請自行找到Include目錄)。

jni.h——————jdk安裝目錄\include

jni_md.h————jdk安裝目錄\include\win32

然後再編譯,構建,就有了test.dll這個動態鏈接庫文件了,把它重命名成goodluck.dll,然後複製到testdll.java的目錄下,運行吧:)

java testdll

結果:

10

原創文章,作者:QLTO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149181.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QLTO的頭像QLTO
上一篇 2024-11-04 17:51
下一篇 2024-11-04 17:51

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • QML 動態載入實踐

    探討 QML 框架下動態載入實現的方法和技巧。 一、實現動態載入的方法 QML 支持從 JavaScript 中動態指定需要載入的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論