JNI java调用动态链接库dll
2015-05-28 22:19
330 查看
现在做的项目中就用到了JNI调用c语言实现的访问设备的dll文件,在此之前对JNI是一窍不通哈,只听说过JNA链接dll,但只是一个了解。
JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C C++编写的代码交互。
理论不多说,还是看java链接dll具体操作吧。。如下:
以下实例为java中调用connection.dll文件中的 open()方法。
1,java方
1)装载dll文件
有两种方式System.load();和System.loadLibrary();
load需要全路径且需要有文件扩展名;
loadLibrary是特定路径,系统system32下或项目bin目录下,只要文件名称不要.dll扩展名。
2)本地声明方法
装载完成dll文件后,将使用的方法用native关键字声明。
3)生成.h头文件
使用javah ConDll 命令生成.h头文件(先使用javac 生成.class文件)。
生成的头文件中方法命名为java类的完整路径和方法,中间用下划线隔开。
注意:如果项目中调用现成的dll文件,我们必须知道C中方法的声明,并在java程序中创建对应的包结构,如果路径不对应,运行java程序时就会报错,亲身教训呀。(我做的项目调整了一下包名,dll文件没有重新编译)。
2,C方
根据生成的.h头文件,实现所有的方法。
一般项目中dll文件都是先有的,在java中调用时一定要确保java类的包路径和类名,要与dll对应的方法全名路径一致。
JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C C++编写的代码交互。
理论不多说,还是看java链接dll具体操作吧。。如下:
以下实例为java中调用connection.dll文件中的 open()方法。
1,java方
1)装载dll文件
有两种方式System.load();和System.loadLibrary();
load需要全路径且需要有文件扩展名;
loadLibrary是特定路径,系统system32下或项目bin目录下,只要文件名称不要.dll扩展名。
2)本地声明方法
装载完成dll文件后,将使用的方法用native关键字声明。
<span style="font-size:18px;"> public class ConDll{ static{ System.load("d://connection.dll"); //或System.loadLibrary("connection"); } public native static void open(); }</span>
3)生成.h头文件
使用javah ConDll 命令生成.h头文件(先使用javac 生成.class文件)。
#include<stdio.h> #include<ConDll.h> JNIEXPORT void JNICALL J***A_ConDll_open(JNIEnv *env,jobject obj);
生成的头文件中方法命名为java类的完整路径和方法,中间用下划线隔开。
注意:如果项目中调用现成的dll文件,我们必须知道C中方法的声明,并在java程序中创建对应的包结构,如果路径不对应,运行java程序时就会报错,亲身教训呀。(我做的项目调整了一下包名,dll文件没有重新编译)。
2,C方
根据生成的.h头文件,实现所有的方法。
一般项目中dll文件都是先有的,在java中调用时一定要确保java类的包路径和类名,要与dll对应的方法全名路径一致。
相关文章推荐
- 基于注解的声明式事务管理
- Caused by: Action class [com.struts.action.LoginAction] not found 解决方法
- 一大波Java来袭(五)——Java集合概述
- 一大波Java来袭(六)——Java集合之Collection和Iterator接口
- 基于XML配置文件的事务管理
- 一大波Java来袭(八)——Java集合之List接口
- 一大波Java来袭(七)——Java集合之Set接口
- 轻量级javaEE SSH 02: jsp servlet
- 轻量级javaEE SSH 01: 概述 环境与工具篇
- 【java基础知识】并发
- HDU ACM 1850 Being a Good Boy in Spring Festival
- spring4.2完整web项目(使用html视图解析器)
- 题目1158:买房子 JAVA
- java 虚拟机与并发处理几个问题简要(一)
- java 虚拟机与并发处理几个问题简要(一)
- java中的多线程一:实现多线程
- 深入理解java异常处理机制
- JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
- Java基础知识之IO(1)
- java资料汇总