JAVA调用DLL

时间:2024.5.8

今天使用,JAVA调用DLL文件,报错误:

Exception in thread "main" java.lang.IllegalStateException: JNative library not loaded, sorry !

我用的是java工程,不是web工程,总是提示报错!!

解决方法:

将JNativeCpp.dll拷贝到jdk的目录下面.

如:D:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin

目录下面即可解决问题!!

下面贴出我的一个实例:

package com.test.JNative;

import org.xvolks.jnative.JNative;

import org.xvolks.jnative.exceptions.NativeException;

import org.xvolks.jnative.pointers.Pointer;

import org.xvolks.jnative.pointers.memory.MemoryBlockFactory; import org.xvolks.jnative.util.Kernel32.SystemTime;

import org.xvolks.jnative.Type;

public class UserCall {

public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException{

// 创建对象

// Kernel32.dll为dll名称,Kernel32目录的位置

为:C:\Windows\System32下面,

// GetSystemTime为Kernel32.dll中的一个方法.

JNative nGetSystemTime = new JNative("Kernel32", "GetSystemTime");

SystemTime systemTime = new SystemTime();

// 设置参数

nGetSystemTime.setParameter(0,

systemTime.getPointer());

nGetSystemTime.invoke();

// 解析结构指针内容

return systemTime.getValueFromPointer();

}

public static void main(String[] args) throws NativeException, IllegalAccessException {

System.err.println(GetSystemTime());

}

}

小结:

使用的方式为JNative-1.3.2开源组件进行调用的方式

(1)JNative.jar拷贝到当前目录下面!!

(2)JNativeCpp.dll拷贝到jdk的目录下面.

如:D:\Program Files (x86)\Java\jdk1.6.0_27\jre\bin

运行上面的程序,返回的是当前的时间:

2012/1/4 at 6:40:50:918

2012-01-04日


第二篇: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、在用友财务软件中,首先应该以管理员的身份新建套帐,建帐之后不应先去初始化期初余额,更重要的工作是进行财务分工!身兼数职:所有的财…

用友财务软件的初步认识及实验心得与体会

引言21世纪是一个信息的时代,会计作为社会经济生活不可或缺的一部分,必将更多地运用信息技术。企业中财务软件的应用即是企业管理信息化。中国企业正面临经济全球化、市场快速变化的挑战,借助信息技术提升企业管理水平是应…

用友软件心得

全球经济一体化和信息化的快速发展企业对培养适应信息化的应用型人才的呼声日益高涨在这样的一个时代背景下如何针对特定的教育对象从一个全新的角度来理解和设计现代职业学习过程让学生学到信息化时代对职业发展有用的知识的技...

用友 软件心得

全球经济一体化和信息化的快速发展企业对培养适应信息化的应用型人才的呼声日益高涨在这样的一个时代背景下如何针对特定的教育对象从一个全新的角度来理解和设计现代职业学习过程让学生学到信息化时代对职业发展有用的知识的技...

用友软件实习总结报告

实习总结报告实习类型财务软件实训实习单位东北石油大学实习起止时间20xx年7月4日至20xx年7月22日21世纪是一个信息的时代,会计作为社会经济生活不可或缺的一部分,必将更多地运用信息技术。企业中财务软件的应…

用友通U8 ERP学习心得体会

用友通U8ERP学习心得体会资讯课:彭兆强通过学习用友ERPU8AllinOne企业全面信息化解决方案的专家培训以及沙盘模拟对抗演练,我学到了很多关于企业管理、ERP原理和企业实际运作的很多知识与经验,从中获益…

用友软件实习心得

这学期通过会计信息系统用友u8软件的学习让我对用友u8软件有了笼统的认识我个人对计算机有着浓厚的兴趣一用友财务软件系统管理财务软件系统管理这部分主要学习了系统管理的相关概念功能及基础设置系统管理是用友财务软件e...

用友软件使用体验

用友软件使用体验用友财务软件的出现使日常枯燥的会计核算工作量大大减轻各种账目的自动登录财务报表的自动生成这些优点都大大吸引了广大财会人员的可是在使用财务软件的过程中总会出现这样或那样的问题在这时即便是计算机专业...

用友erp实验心得

ERP心得在做实验的过程中小组还是有一个坏习惯不做预算且受到很多因素影响变换生产经营策略导致在第三年流动资金不足因看到别组经营策略害怕自己小组的生产线太小在第二年就开始建了6条生产线因为看到自己剩下的现金足够就...

用友软件使用总结(60问)

用友软件使用总结60问20xx年目录1初始化篇119问2日常操作篇总账系统2035问报表系统3642问3系统环境篇4349问4供应链篇5060问初始化篇1会计科目的复制在新增会计科目过程中可能遇到新增科目的下级...

用友学习心得

用友学习这步是年结前的准备事项一各模块结账状态检查1现金管理中上年做银行对帐后要做核销2采购销售库存核算和固定资产模块均期末处理并12月份月结3工资模块完成当年业务但12月份不需做月末处理当工资结转后12月份自...

用友软件操作心得

001账套20xx年6月1日前002账套20xx6120xx630008账套20xx71现在在导出出错时应还原后再操作查销售与成本在时空的出库流水或销售报表中生物制品部新特药三部亿腾赞邦商务拓展部自己采购与销售...

用友软件心得(35篇)