Welcome 微信登录

首页 / 软件开发 / JAVA / 教你在java中使用dll方法

教你在java中使用dll方法2011-10-02 blogjava caitongJava语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快 速,也能带来跨平台性。

Java调用C/C写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过 程中容易出现问题。

使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机 器上调用不同的本地库。Jawin和 Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖 Windows的实现,使得在Windows平台下使用COM和 DLL的更加方便。

三、JNI

sun相关文档:http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html

http://www.bt285.cn/ 或是 http://www.5a520.cn/

JNI的完整例子 :http://www.pconline.com.cn/pcedu/empolder/gj/java/0506/642328.html

JNI的应用方案是基于Java类和本地函数相映射的。其使用DLL的步骤还是相对比较麻烦,不但涉及到 Java编程,还涉及到C/C编程。

JNI的使用步骤是:

1.编写Java类,用该类将DLL对外提供的函数服务进行声明,其中的Java方法均声明为native,其方法 签名可以自定义,不用实现函数体。

2.用Javah工具将该Java类生成对应的.h头文件。

3.最重要的比较麻烦的一步:编写C/C代码实现.h头文件中声明的函数,该C/C 代码中包含jni.h 头文件,并且编写代码时使用其中定义好的数据类型作为函数的输入和返回数据类型进行编程。用这种方 法实现数据类型转换。例如数据类型:boolean(java) à jboolean(jni.h: typedef unsigned char jboolean),在自己编写的C/C 代码中使用数据类型jboolean映射Java中的boolean类型。在该步骤中 ,可以在C/C代码中调用已经存在的DLL库。

4.另外编写的Java代码时就可以使用该Java类了。

在第3步中,编写C/C函数时,可以使用一个叫interface pointer的env指针来调用JNI提供的一系列( 很多)函数,用这些函数来访问JVM的对象和数据。

使用JNI的缺点:使用比较麻烦,需要对已有的DLL进行封装,需要对C/C 比较了解。

使用JNI的优点:可以跨平台调用本地库。