成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java源代碼讀取dll java怎么讀源碼

如何在java中調(diào)用.dll文件,詳細(xì)點(diǎn)帶上代碼這些辣

首先下截JNative組件

融水ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

jnative.sourceforge.net/ 到這里下載JNative開源項(xiàng)目,我下載的是1.3.2

解壓JNative-st1:chsdate isrocdate="False" islunardate="False" day="30"

month="12" year="1899"1.3.2/st1:chsdate.zip

獲得三個(gè)文件,分別是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。

JNativeCpp.dll

Windows下用的,拷貝到windows / system32目錄下;

libJNativeCpp.so

Linux下的,拷貝到系統(tǒng)目錄下;

JNative.jar 這是一個(gè)擴(kuò)展包,導(dǎo)入工程LIB中或?qū)⑵淇截惖絡(luò)dk\jre\lib\ext

下,系統(tǒng)會(huì)自動(dòng)加載。

?使用說明

我的項(xiàng)目將使用JNative組件調(diào)用一個(gè)測(cè)試應(yīng)用服務(wù)器狀態(tài)的TestAppSvr.dll文件,Dll文件中包含一個(gè)TestConnect()方法,返回一個(gè)整形的結(jié)果(1或0)

首先配置好JNative組件的windows環(huán)境:

將Native要用到JNativeCpp.dll放在系統(tǒng)盤的\WINDOWS\system32下

將JNative.jar導(dǎo)入工程中,新建一個(gè)調(diào)用類:

java 代碼

復(fù)制代碼

代碼如下:

package com.tvjody;

import

java.io.File;

import java.io.FileOutputStream;

import

java.io.IOException;

import java.io.InputStream;

import

org.xvolks.jnative.JNative;

import org.xvolks.jnative.Type;

import

org.xvolks.jnative.exceptions.NativeException;

public class

AppSvrTestConnect {

public AppSvrTestConnect() {

}

/**

* 測(cè)試應(yīng)用服務(wù)器連接狀態(tài)

*

* TestConnect

* @param ip 應(yīng)用服務(wù)器IP

* @param port 端口

* @param

intrcpt 是否采用數(shù)據(jù)壓縮方式 1 :true 0:false

* @return int 1 :成功 0:失敗

* @throws NativeException

* @throws IllegalAccessException

*/

private static final int TestConnect(String ip, int port, int

intrcpt)throws NativeException, IllegalAccessException {

JNative n

= null;

try {

n = new

JNative("TestAppSvr.dll", "TestConnect");

n.setRetVal(Type.INT);

int i = 0;

n.setParameter(i++, Type.STRING, ip);

n.setParameter(i++,

Type.INT, "" + port);

n.setParameter(i++, Type.INT, "" +

intrcpt);

n.invoke();

return

Integer.parseInt(n.getRetVal());

} finally {

if

(n != null)

n.dispose();

}

}

/**

* 指定Dll文件路徑,動(dòng)態(tài)加載本地鏈接庫(kù),測(cè)試應(yīng)用服務(wù)器連接狀態(tài)

* setDllPath

* @param path Dll文件的路徑,不包含DLL名稱 例如:windows - d:\test\test\ unix -

root/test/test/

* @param ip 應(yīng)用服務(wù)器IP

* @param port 端口

* @param intrcpt 是否采用數(shù)據(jù)壓縮方式 1 :true 0:false

* @return int 1

:成功 0:失敗

* @throws NativeException

* @throws

IllegalAccessException

*/

public static final int

TestConnectFromDllPath(String path,String ip, int port, int intrcpt) throws

NativeException, IllegalAccessException{

path +=

"TestAppSvr.dll";

System.load(path);

return

TestConnect(ip,port,intrcpt);

}

/**

*

Dll文件放在JRE\bin目錄下面,ClassLoader就能通過System.loadLibrary()動(dòng)態(tài)加載本地鏈接庫(kù)

*

TestConnectFromDllPath

* @param ip 應(yīng)用服務(wù)器IP

* @param port 端口

* @param intrcpt 是否采用數(shù)據(jù)壓縮方式 1 :true 0:false

* @return int 1

:成功 0:失敗

* @throws NativeException

* @throws

IllegalAccessException

*/

public static final int

TestConnectFromDllPath(String ip, int port, int intrcpt) throws NativeException,

IllegalAccessException{

System.loadLibrary("TestAppSvr");

return TestConnect(ip,port,intrcpt);

}

}

這個(gè)類實(shí)現(xiàn)了一個(gè)靜態(tài)私有方法,用來調(diào)用Dll文件中的方法返回結(jié)果

private static final int TestConnect(String ip, int port, int intrcpt)

兩個(gè)靜態(tài)公共方法,分兩種方式裝載DLL文件

public static final int TestConnectFromDllPath(String path,String ip, int

port, int intrcpt) //通過DLL文件的路徑

public static final int

TestConnectFromDllPath(String ip, int port, int intrcpt)

//通過ClassLoader

然后新建一個(gè)類,調(diào)用AppSvrTestConnect.java,實(shí)現(xiàn)方法一調(diào)用,我是將TestAppSvr.dll文件與Demo.java放在一個(gè)目錄下

,所以得到Demo.java的路徑后就可以得到TestAppSvr.dll的路徑,調(diào)用AppSvrTestConnect.TestConnectFromDllPath()方法后就能返回正確的信息.方法二是已經(jīng)將TestAppSvr.dll放在了Jre\bin目錄下,在JVM的Classloader的時(shí)候會(huì)自動(dòng)加載,然后通過System.loadLibrary("TestAppSvr")就可以裝配DLL文件.

java 代碼

復(fù)制代碼

代碼如下:

public class Demo {

public int

getInfo() throws NativeException, IllegalAccessException{

String path=getClass().getResource(File.separator).getPath();

path = path.substring(1,path.length());

System.out.println(path); //得到DLL文件的路徑

String ip =

"192.168.0.48"; //服務(wù)器IP

int port = 221; //端口

int intrcpt = 1; //數(shù)據(jù)壓縮方式傳送,1為采用;0為不采用

//方法1 傳入Dll文件的路徑

//int info =

AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);

//方法2 Dll文件已經(jīng)放在JRE\bin目錄下面

int info =

AppSvrTestConnect.TestConnectFromDllPath(ip, port, intrcpt);

//1為成功,0為失敗

if (info == 1)

System.out.println("應(yīng)用服務(wù)器可用。");

else

System.out.println("應(yīng)用服務(wù)器不可用,請(qǐng)檢查IP地址和端口是否正確。");

return info;

}

System.loadLibrary():裝載Windows\System32下或jre\bin或Tomcat\bin目錄下的本地鏈接庫(kù)

System.load():根據(jù)具體的目錄來加截本地鏈接庫(kù),必須是絕對(duì)路徑

?備注

上面的示例工程,因?yàn)槭抢?所以沒有大多的設(shè)計(jì),只是實(shí)現(xiàn)了裝載DLL文件,調(diào)用DLL文件方法,返回信息.

注意JVM只允許一個(gè)默認(rèn)的ClassLoader來load native library,同時(shí)并不提供專門的API來unload一個(gè)loaded

native library,所以在項(xiàng)目調(diào)試的時(shí)候,獨(dú)立啟動(dòng)Web Server.

java如何調(diào)用別人給的DLL文件

JAVA通過JNI調(diào)用本地方法,而本地方法是以庫(kù)文件的形式存放的(在WINDOWS平臺(tái)上是DLL文件形式,在UNIX機(jī)器上是SO文件形式)。通過調(diào)用本地的庫(kù)文件的內(nèi)部方法,使JAVA可以實(shí)現(xiàn)和本地機(jī)器的緊密聯(lián)系,調(diào)用系統(tǒng)級(jí)的各接口方法。

簡(jiǎn)單介紹及應(yīng)用如下:

一、JAVA中所需要做的工作

在JAVA程序中,首先需要在類中聲明所調(diào)用的庫(kù)名稱,如下:

static {

System.loadLibrary(“goodluck”);

}

在這里,庫(kù)的擴(kuò)展名字可以不用寫出來,究竟是DLL還是SO,由系統(tǒng)自己判斷。

還需要對(duì)將要調(diào)用的方法做本地聲明,關(guān)鍵字為native。并且只需要聲明,而不需要具 體實(shí)現(xiàn)。如下:

public native static void set(int i);

public native static int get();

然后編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會(huì)生成C/C++的頭文件。

例如程序testdll.java,內(nèi)容為:

public class testdll

{

static

{

System.loadLibrary("goodluck");

}

public native static int get();

public native static void set(int i);

public static void main(String[] args)

{

testdll test = new testdll();

test.set(10);

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

}

}

用javac testdll.java編譯它,會(huì)生成testdll.class。

再用javah testdll,則會(huì)在當(dāng)前目錄下生成testdll.h文件,這個(gè)文件需要被C/C++程序調(diào)用來生成所需的庫(kù)文件。

怎樣能在Java中調(diào)用C語(yǔ)言生成的DLL文件

以下這個(gè)例子實(shí)現(xiàn)的是通過調(diào)用C寫的DLL,計(jì)算字符串長(zhǎng)度。 一、 生成C的頭文件 1. 編輯Main.java public class Main { public native static int getStrNum(byte str[], int strLen); }2. 生成頭文件 按win + r打開“運(yùn)行”窗口,輸入“cmd”,打開DOS控制臺(tái)窗口。進(jìn)入上面Main.java所在的目錄中,輸入: javac Main.java javah Main 兩條命令完成后會(huì)生成Main.h文件 二、 生成DLL 1. 新建空工程 在VS中新建工程:Win32 Console Application,取名“MakeDLL”,選擇空工程。新建后修改工程屬性: (1) General中,將“Configuration Type”改為“Dynamic Library (.dll)”; (2) C/C++的General中,將“Additional Include Directories”添加兩項(xiàng): “C:Program FilesJavajdk1.5.0_06include” “C:Program FilesJavajdk1.5.0_06includewin32” 根據(jù)你安裝的JAVA路徑而設(shè)置,這是因?yàn)樵贑/C++編譯過程中要使用JAVA的jni.h等文件 2. 將上面生成的Main.h添加入工程 3. 新建一個(gè)新的文件main.cpp,代碼如下: #include 'Main.h' #include 'string.h' JNIEXPORT jint JNICALL Java_Main_getStrNum (JNIEnv *env, jclass cls, jbyteArray str, jint strLen) { jbyte *buffer = (*env).GetByteArrayElements(str, 0); buffer[strLen] = ''; // 由于JAVA自動(dòng)分配空間,需要傳進(jìn)來字符串長(zhǎng)度參數(shù) jint len = strlen((char*)buffer); return len; }4. 按F7編譯鏈接,生成MakeDLL.dll文件 三、 JAVA調(diào)用DLL 在JAVA中使用上面生成的DLL文件: 1. 將MakeDLL.dll復(fù)制到與使用DLL的JAVA文件相同的目錄下。 2. JAVA文件的源代碼: public class Main { static { System.loadLibrary('MakeDLL'); } public native static int getStrNum(byte str[], int strLen); public static void main(String[] args) { Main instance = new Main(); String str = new String('haha'); int num = instance.getStrNum(str.getBytes(), str.length()); System.out.println(num); } }總結(jié): 另外,JAVA與DLL函數(shù)的參數(shù)傳遞過程,像int類型的,可以直接從JNI函數(shù)參數(shù)列表中獲??;而數(shù)組元素則要通過JNIEnv來獲取: jbyte *buffer = (*env).GetByteArrayElements(str, 0); // str是參數(shù)列表中jbyteArray變量 同理可以獲取char[]的元素。 函數(shù)返回時(shí),可以直接用return語(yǔ)句返回。也可以設(shè)置參數(shù)列表中的變量指針來返回: (*env).SetByteArrayRegion(byteArray, 0, 128, byteArr); byteArray是參數(shù)列表中的jbyteArray變量,作為指針用來返回需要返回的信息;byteArr是jbyte*類型,里面存放的值是要返回的內(nèi)容。 其它的信息可以從Google或Baidu中通過查找“jni”或“java調(diào)用DLL”來查閱到。 (T007)

java代碼調(diào)用dll文件

這個(gè)是 ActiveX 的庫(kù)吧,包裝成一個(gè)組件了,所以你得找個(gè) jacob 這樣的操作 ActiveX 對(duì)象的庫(kù) API.

本文標(biāo)題:java源代碼讀取dll java怎么讀源碼
網(wǎng)頁(yè)地址:http://jinyejixie.com/article18/doseigp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
淮南市| 龙岩市| 错那县| 东至县| 天津市| 色达县| 岱山县| 荣昌县| 灵石县| 老河口市| 郎溪县| 玉溪市| 偏关县| 丹阳市| 海阳市| 上林县| 尖扎县| 车险| 蚌埠市| 泗洪县| 广东省| 绩溪县| 阜宁县| 商都县| 镇原县| 宜宾市| 胶州市| 黔东| 白水县| 绥宁县| 滕州市| 富蕴县| 曲松县| 古田县| 皋兰县| 佛山市| 肃北| 梅州市| 鄯善县| 调兵山市| SHOW|