java学习 JAVA调用DLL,
java学习 JAVA调用DLL,
java调用dll的几种方法(JNI,Jawin,Jacob)
前些天做单点登录,需要java调用dll,现在把成功经验与大家分享。 Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的 机器上调用不同的本地库。Jawin和Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖Wi ndows的实现,使得在Windows平台下使用COM和DLL的更加方便。 一、JNI(Java本地方法调用) 到Java编程,还涉及到C/C++编程。 JNI的使用步骤是: 1. 编写Java类,用该类将DLL对外提供的函数服务进行声明,其中的Java方法均声明为native,其方法 签名可以自定义,不用实现函数体。 2. 用Javah工具将该Java类生成对应的.h头文件。 3. 最重要的比较麻烦的一步:编写C/C++代码实现.h头文件中声明的函数,该C/C++代码中包含jni.h头文 件,并且编写代码时使用其中定义好的数据类型作为函数的输入和返回数据类型进行编程。用这种方法 实现数据类型转换。在该步骤中,可以在C/C++代码中调用已经存在的DLL库(当别人给我们提供一个现 成的dll控件时,我们只知道接口,不能改变它的实现,就需要“自定义的dll”调用“现成dll”) 4. 另外编写的Java代码时就可以使用该Java类了。 在第3步中,编写C/C++函数时,可以使用一个叫interface pointer的env指针来调用JNI提供的一系列( 很多)函数,用这些函数来访问JVM的对象和数据。 使用JNI的缺点:使用比较麻烦,需要对已有的DLL进行封装,需要对C/C++比较了解。 使用JNI的优点:可以跨平台调用本地库。
二、Jawin 官方网站:http://jawinproject.sourceforge.net/
数后,通过原始字节流(需要考虑参数数据类型所占的存储字节数及系统使用的字节序列)传递给该DLL 函数需要的参数,其返回值也是通过原始字节流解析的方式获得正确的值。 Jawin有一个Jawin.dll和Jawin.jar,根据开发环境不同,需要不同的配置.
转换比较了解;不能跨平台,对Windows的依赖性比较强。 使用Jawin的优点:方便使用,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。 本人体会:我在用 Jawin 调用单点的dll时,多次出现错误,最终调试失败,后来查看它的官方文档, 发现它对某些com调用不支持。 三、Jacob 官方文档:http://danadler.com/jacob/ Jacob是Java-Com Bridge的缩写,也可以用来调用DLL。其底层也是使用JNI实现,也具有Windows 的平 台依赖性。 该控件调用相当方便,可以调用com和active, 几分钟就可以搞定,它下载后有一个dll和一个jar包, 把dll放到WIN_HOME/system32/下既可,把jar包放到工程的classpath下。 下面是我调用单点dll的事例: import com.jacob.com.*;
Variant(strPlainString),new Variant(lngRandomnum),new Variant(strSvrCert)); 优点:调用相当方便,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。 总结:以上三种方法是现在常用的java调用dll方法,本人感觉第三种比较好用,当然,每种都有优缺 点,还有性能问题,我没有测试比较,请大家自己试一下吧 |
相关文章
- 暂无相关文章
用户点评