JNI java调用动态链接库dll

谁践踏了优雅 2022-08-05 00:51 270阅读 0赞
  1. 现在做的项目中就用到了JNI调用c语言实现的访问设备的dll文件,在此之前对JNI是一窍不通哈,只听说过JNA链接dll,但只是一个了解。
  2. JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C C++编写的代码交互。
  3. 理论不多说,还是看java链接dll具体操作吧。。如下:
  4. 以下实例为java中调用connection.dll文件中的 open()方法。

1,java方

  1. 1)装载dll文件
  2. 有两种方式System.load();和System.loadLibrary();
  3. load需要全路径且需要有文件扩展名;
  4. loadLibrary是特定路径,系统system32下或项目bin目录下,只要文件名称不要.dll扩展名。
  5. 2)本地声明方法
  6. 装载完成dll文件后,将使用的方法用native关键字声明。
  7. <span style="font-size:18px;">
  8. public class ConDll{
  9. static{
  10. System.load("d://connection.dll");
  11. //或System.loadLibrary("connection");
  12. }
  13. public native static void open();
  14. }</span>
  15. 3)生成.h头文件
  16. 使用javah ConDll 命令生成.h头文件(先使用javac 生成.class文件)。
  17. #include<stdio.h>
  18. #include<ConDll.h>
  19. JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);
  20. 生成的头文件中方法命名为java类的完整路径和方法,中间用下划线隔开。
  21. 注意:如果项目中调用现成的dll文件,我们必须知道C中方法的声明,并在java程序中创建对应的包结构,如果路径不对应,运行java程序时就会报错,亲身教训呀。(我做的项目调整了一下包名,dll文件没有重新编译)。

2,C方

  1. 根据生成的.h头文件,实现所有的方法。
  2. 一般项目中dll文件都是先有的,在java中调用时一定要确保java类的包路径和类名,要与dll对应的方法全名路径一致。

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 动态DLL

    一、DLL简介 它是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法

    相关 dll动态(1)

    1、库类型 动态链接库:dll类型, 静态链接库:lib类型; 2、动态库简介: 动态链接库可以看成是一种仓库,一种资源的集合:函数,变量,类,资源……都可以由