Java调用DLL方法

坛子里有人提到,但有这方面需要的人不多,大部分讨论都是些无意义的回答。因公司的项目涉及到几个硬件,而硬件厂商只提供DLL,有的是ActiveX,有的是其它的DLL。之前对DLL也没研究过,现在需要调用DLL里的方法,当然是希望实现的越简单越好。在网上一番搜索,方法倒是不少: jni http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html jniwrapper http://www.teamdev.com/jniwrapper/ jacob http://danadler.com/jacob/ jawin http://jawinproject.sourceforge.net/ jna https://jna.dev.java.net/ jnative http://jnative.free.fr ,http://sourceforge.net/projects/jnative/ 还有很多... JNI是最基本的,其它大部分都是基于JNI实现的。你可以直接用JNI来实现调用DLL,但会比较麻烦一些,因为你还必须写一些C/C++代码,并且你得知道怎么用C/C++去调DLL。比较反感,先放着暂时不用,万不得以可以作为终结武器用。 然后是jniwrapper,一看,要钱的啊,也可以喀嚓 用Java调用ActiveX,比如VB写的ActiveX DLL,可以用jacob。不过用jacob好象DLL是那种需要在注册表里注册的,我不知道怎么去掉标准的DLL,或许是调不了吧 下面三个可以调标准的DLL,但似乎又调不了ActiveX DLL,郁闷。谁知道怎么调告诉我 我的问题是:谁能提供一种简单方便的工具,不用写C/C++,不用花钱,可以同时调上面两种DLL的 ?
Java调用DLL动态链接库的方案通常有三种:JNI、Jawin、Jacob [^2]。 JNIJava Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库 [^2]。在Eclipse中使用Java调用Native代码示例如下: ```java package bingcao; /** * @author troy * 2017-08-22 下午19:28 */ public class TestJNI { // 声明本地方法 public native double nativeMethod(); public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 获取开始时间 // 加载动态链接库 System.load("D:/documents/visual studio 2013/Projects/nativeDLL/x64/Debug/nativeDLL.dll"); TestJNI nativeCode = new TestJNI(); double result = nativeCode.nativeMethod(); System.out.println(result); System.out.println("JNI成功调用dll!!!"); long endTime = System.currentTimeMillis(); // 获取结束时间 System.out.println("程序运行时间: " + (endTime - startTime) + "ms"); } } ``` Jawin和Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖Windows的实现,使得在Windows平台下使用COMDLL更加方便 [^2]。 此外,还有通过DLL文件路径和ClassLoader调用的方式。例如有方法声明: ```java 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 ``` 实现方法一是将TestAppSvr.dll文件与Demo.java放在一个目录下,得到Demo.java的路径后就可以得到TestAppSvr.dll的路径,调用`AppSvrTestConnect.TestConnectFromDllPath()`方法后就能返回正确的信息。方法二是将TestAppSvr.dll放在了Jre\bin目录下,在JVM的Classloader的时候会自动加载,然后通过`System.loadLibrary("TestAppSvr")`就可以装配DLL文件 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷月宫主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值