JAVA调用第三方DLL的方法

时间:2024.5.9

JAVA调用第三方DLL的方法

举例:Windows平台的部署。

首先将将动态连接库(AA.dll)拷贝到PATH环境变量指定的目录下, 即动态连接库的搜索路径是由PATH环境变量指定。然后把AAbean.jar加入环境变量classpath中。需要注意的是加载的dll和jar文件是你所需要的正确版本, 避免交叉引用。

Linux/Unix平台AA Javabeans的部署也类似,所不同的是:

Linux/Solaris平台动态连接库的搜索路径是由LD_LIBRARY_PATH环境变量指定;Aix平台动态连接库的搜索路径是由LIBPATH环境变量指定;HP-UX平台动态连接库的搜索路径是由SHLIB_PATH环境变量指定。

开发环境下临时部署:

在JAVA类中调用System.getProperty(“java.library.path”),根据输出的路径将AA.dll拷贝到该目录下。然后把AAbean.jar加入环境变量classpath中

附件:

System.getProperty()参数大全

java.version Java Runtime Environment version

java.vendor Java Runtime Environment vendor

java.vendor.url Java vendor URL

java.home Java installation directory

java.vm.specification.version Java Virtual Machine specification version java.vm.specification.vendor Java Virtual Machine specification vendor java.vm.specification.name Java Virtual Machine specification name java.vm.version Java Virtual Machine implementation version java.vm.vendor Java Virtual Machine implementation vendor java.vm.name Java Virtual Machine implementation name

java.specification.version Java Runtime Environment specification version java.specification.vendor Java Runtime Environment specification vendor java.specification.name Java Runtime Environment specification name java.class.version Java class format version number

java.class.path Java class path

java.library.path List of paths to search when loading libraries java.io.tmpdir Default temp file path

java.compiler Name of JIT compiler to use

java.ext.dirs Path of extension directory or directories os.name Operating system name

os.arch Operating system architecture

os.version Operating system version

file.separator File separator ("/" on UNIX)

path.separator Path separator (":" on UNIX)

line.separator Line separator ("\n" on UNIX)

user.name User''s account name

user.home User''s home directory

user.dir -


第二篇:JAVA调用DLL(例子二)


JAVA调用DLL(例子二)

2008-08-19 13:01

JNI的研究

以下是我個人的經驗

雖然JAVA的程式都必須在JAVA的虛擬機器上執行,但是我們可以在這部機器中打一個洞,讓JAVA程式可以直接溝通實際的機器

JNI是一種讓JAVA程式可以外接外部程式的一種機制,讓JAVA程式更具有擴充性,下面將示範一個簡單的範例,這個範例中說明JAVA程式如何與C語言接軌,事實上昨天所談的Prolog就是利用這種方式使Java程式可以使用prolog,透過dll和native的方式來達成這項任務,經過這樣的測試與實驗之後讓我不得不佩服java這個程式語言

你不需要擔心程式方面的問題,因為底下的程式架構都相當簡單,主要只是讓我們體驗一下

工具介紹:我將使用visual c++ 6.0來製作dll,使用java sdk 1.4來編譯我的java

java部分的實作

程式碼如下(HelloWorld.java): 1 class HelloWorld {

2 public native void displayHelloWorld();←左方的native型態是通知3 Java這個函數會使用到外部函數

4

5 static {

6 System.loadLibrary("hello"); ←左方的程式碼代表我要載入hello.dll7 的動態連結,hello.dll的製作我在稍後會做介紹

8 }

9

10 public static void main(String[] args) {

11 new HelloWorld().displayHelloWorld();

}

JAVA调用DLL例子二

當你完成上述的程式之後,將這個程式存檔為'HelloWorld.java'先用'javac HelloWorld.java'這個指令將它組譯成HelloWorld.class,然後使用'javah HelloWorld'產生HelloWorld.h,在HelloWorld.h中我們知道我們要實作一個函數Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject); 接下來我將介紹如何完成這個函數

實作生平的第一個dll,在之前知道在windows和linux下有一種叫dll,動態連結的機制,但是一直不曉得到底它是怎麼做的,今天將要實作第一個這樣的東西

我會盡量將東西描述清楚,因為這是我第一次的經驗

首先啟動visual c++ 6.0,在檔案中選擇新增,然後在project中選擇Win32 Dynamic-Link Library這個選項,然後填寫你專案的名稱'hello',按下'Ok',請選擇An empty Dll project這一選項,然後按'Finish'再按下'Ok',我們要從頭開始。

經過上述動作之後我們就會得到一個空的專案資料,然後我們需要增加一些程式到我們的專案中,在這之前我們先處理好我們的.h檔,首先先到你安裝java JDK的目錄下找到include的資料夾,為了以後撰寫程式方便,將這個目錄下的所有檔案複製一份到你安裝visual c++ 6.0目錄下VC98\Include裡面,預設路徑為C:\Program Files\Microsoft Visual Studio\VC98\Include,將資料複製到此資料夾中,並將原本放在win32中的jawt_md.h和jni_md.h複製一份至C:\Program Files\Microsoft Visual Studio\VC98\Include

完成這些前置動作之後,再來將我們剛剛產生的HelloWorld.h加入我們的Header Files中,並新增一個.c的檔案HelloWorldImp.c,然後到上方的功能表中Build選則'Build hello.dll',然後你將會得到一個hello.dll在專案目錄下的Debug\hello.dll,到此為止,如果順利你應該的到dll檔

程式碼如下(HelloWorldImp.c): 1 #include

2 #include "HelloWorld.h"

3 #include

4

5 JNIEXPORT void JNICALL

6 Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 7 {

8 printf("HelloWorld");

9 return;

10 }

程式碼如下(HelloWorld.h) 1 /* DO NOT EDIT THIS FILE - it is machine generated */ #include 2 /* Header for class HelloWorld */ #ifndef _Included_HelloWorld 3 #define _Included_HelloWorld

4 #ifdef __cplusplus extern "C" { #endif

5 /*

6 * Class: HelloWorld

7 * Method: displayHelloWorld

8 * Signature: ()V

9 */

10 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld 11 (JNIEnv *, jobject);

12 #ifdef __cplusplus } #endif

#endif

然後將hello.dll和HelloWorld.class放在同一個目錄下,執行java HelloWorld,出現列印HelloWorld在畫面上的結果

以上這是一個小小的範例,目的只是在做一個小小的實驗,因為沒有一個人會因為要列印一串自救去呼叫C語言來幫你做事,而會直接使用System.out.print("HelloWorld"),比較快一點

透過以上這個小實驗讓我們知道java和c之間是有辦法互通的,因此或許java可以透過這個方式與作業系統之間有更密切的互動

[註]以上資料出自於

http://140.129.25.117:8000/swpweb/mycalendar.py?who_calendar=mycalendar,這是我個人的研究心得報告,剛好我有研究到這個所以就將文章放到這邊與大家分享(檔案位置20xx年12月26所撰寫的心得)

更多相关推荐:
第三方合同范本

工程总承包合同示范文本征求意见稿1第一部分合同协议书发包人全称承包人全称依照中华人民共和国合同法中华人民共和国建筑法及相关法律行政法规遵循平等自愿公平和诚信原则合同双方就项目工程总承包事宜经协商一致订立本合同一...

甲乙丙三方合同范本

家政服务协议书编号甲方经营者联系电话法定代表人经营住所乙方消费者联系电话家庭住所身份证号丙方服务人员身份证号联系电话户口所在地经甲乙丙三方协商签订本家政公司服务协议一三方约定家政服务事项1服务内容甲方同意为乙方...

委托第三方合同书范本(改)

项目物业服务合作合同甲方注册地址法人代表授权代表联系电话乙方注册地址法人代表授权代表联系电话根据中华人民共和国合同法及其实施细则等国家地方有关物业管理法律法规和政策在平等自愿协商一致的基础上甲乙双方现就有关宜达...

第三方合同样板

通信配套工程建设合作协议法定代表人以下简称甲方单位地址公司以下简称乙方法人代表单位地址鉴于甲乙双方彼此长期友好的战略合作伙伴关系现就双方进一步合作事宜本着平等互利共同发展的原则为了解决甲方开发建设的阿旗安泰家园...

第三方服务合同范本

第三方服务合同范本合同编号签约地点甲方乙方甲乙双方本着精诚合作互惠互利的原则就甲方委托乙方代理乙方为甲方及其客户提供国内国外货物运输分拨及其相关信息服务业务第三方物流服务签订如下合同一权利义务1甲方权利义务甲方...

第三方物流外包服务合同模板

绿蚂蚁物流搜索第三方物流外包服务合同模板合同编号签约地点甲方乙方地址地址联系人联系人电话电话传真传真甲乙双方本着精诚合作互惠互利的原则就甲方委托乙方代理乙方为甲方及其客户提供国内货物运输分拨及其相关信息服务业务...

第三方物流合同范本

第三方物流合同说明本合同是一个3PL物流服务合同范本XXX物流可以结合法律环境提供服务的种类甲方的要求等在实际应用中参考应用其中的相关条款本合同范本为V10其他参考说明我们知道工商企业与3PL物流服务提供者建立...

仓单质押反担保合同(第三方)

上海融资担保有限公司仓单质押反担保合同合同编号0仓单质押反担保合同出质人以下简称甲方质权人以下简称乙方鉴于1下称债务人与下称主债权人于年月日签订合同附件1下称主合同合同编号为约定由主债权人向债务人提供金额为人民...

第三方信用担保合同范本--20xx0622

保证合同债权人甲方郑州思念食品有限公司保证人乙方债务人丙方鉴于1甲方丙方之间存在业务关系已经或可能存在债务关系或责任2乙方愿意为前述业务关系已经或可能产生的全部债务或责任向甲方提供担保在甲方与丙方后续的业务中无...

三方合作协议书范本

三方合作协议书范本合伙人甲姓名性别年月日出生现住址市县街道乡村号合伙人乙姓名性别年月日出生现住址市县街道乡村号合伙人丙姓名性别年月日出生现住址市县街道乡村号合伙人本着公平平等互利的原则订立合伙协议如下第一条甲乙...

反担保抵押合同(第三方)

反担保抵押合同第三方合同编号甲方抵押权人担保人法定代表人乙方债务人法定代表人丙方抵押人抵押物中华人民共和国林权证鉴于一乙方与以下称主债权人签订合同编号以下称主合同向主债权人申请第1项选择下列任一项或多项以下称主...

第三方保证合同

保证合同编号甲方保证人公司名称邮政编码法定代表人电话传真地址账号乙方债权人公司名称邮政编码法定代表人主要负责人电话传真为保障乙方与债务人以下简称主合同债务人所签订的编号为的以下简称主合同项下的债权甲方愿意为主合...

第三方合同范本(33篇)