Java通过JNI 调用动态链接库DLL操作

  • 更新时间:2022-07-27 14:29:02
  • 编辑:宋乐志
为找教程的网友们整理了Java相关的编程文章,网友寇成弘根据主题投稿了本篇教程内容,涉及到Java、JNI、动态链接库DLL、Java JNI动态链接库DLL相关内容,已被596网友关注,涉猎到的知识点内容可以在下方电子书获得。
java班主任管理系统源码(带数据)
java班主任管理系统源码(带数据)
  • 大小:3.84 MB
  • 发布人:甄爱萍
  • 下载:java源码

Java JNI动态链接库DLL

JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C、C++编写的代码交互。

在Android编程中,so库的访问也用到了jni技术。

理论多说无益,还是看java连接dll的实战吧。如下:

例:java中调用demo.dll文件中的 hello()方法。

1、java

1)装载dll文件

有两种方式System.load();和System.loadLibrary();

load需要全路径且需要有文件扩展名;

loadLibrary是特定路径,系统system32下或项目bin目录下,只要文件名称不要.dll扩展名。

2)本地声明方法

装载完dll文件后,将使用的方法用native关键字声明。

public class ConnectDemoDll{
 static{
  System.load("c://demo.dll");
  //或者
  //System.loadLibrary("demo");
 }
 public native static void hello();
}

3)生成.h头文件

首先使用javac ConnectDemoDll.java生成.class文件,再使用javah ConnectDemoDll命令生成.h头文件

#include<stdio.h> 
#include<ConnectDemoDll.h> 
JNIEXPORT void JNICALL JAVA_ConnectDemoDll_hello(JNIEnv *env,jobject obj);

生成的头文件中方法命名为:java类的完整路径_方法(中间下划线分割)

注意:如果项目中调用现成的dll文件,我们必须知道C中方法的声明,并在java程序中创建对应的包结构,如果路径不对应,运行java程序时就会报错。当包名调整了之后,请重新编译对应的dll文件。

2、C

根据生成的.h头文件,实现所有的方法即可。

注:

一般项目中dll文件都是本来就有的,说白了就是一开始就有编译好了的dll文件,在java中调用时一定要确保java类的包路径和类名,要与dll对应的方法全名路径一致,否则会出错。

补充知识:jni操作中java调用dll文件部署失效问题

vs发布dll版本时,没有选择release版本,而是用的debug版本,导致可能找不到需要依赖的dll

<audio controls="controls" style="display: none;"></audio>

以上这篇Java通过JNI 调用动态链接库DLL操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持java学习网。

相关下载

  • Java游戏编程开发教程

    大小:160.3 MB
  • Java网络编程精解

    大小:47 MB
  • Java编程思维

    大小:3.0 MB
  • Java学习指南

    大小:179.5 MB
  • 软件开发综合实践指导教程:JAVA WEB应用

    大小:69.9 MB

相关教程

  • Java中final关键字详解及实例

    给大家整理一篇关于Java的教程,这篇文章主要介绍了Java中final关键字详解及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-07-01

  • java calendar 日期实现不断加一天的代码

    给大家整理一篇关于java的教程,这篇文章主要介绍了java calendar 日期实现不断加一天的代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2022-06-14java calendar日期加一天

  • Java后台实现浏览器一键导出下载zip压缩包

    给网友们整理关于Java的教程,这篇文章主要为大家详细介绍了Java后台实现浏览器一键导出下载zip压缩包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-06-12

  • java实现微信小程序登录态维护的示例代码

    给大家整理了关于java的教程,本篇文章主要介绍了java实现微信小程序登录态维护的示例代码,具有一定的参考价值,有兴趣的可以了解一下

    发布时间:2022-07-20

  • java批量解析微信dat文件

    java批量解析微信dat文件

    给网友朋友们带来一篇关于java的教程,这篇文章主要为大家详细介绍了java批量解析微信dat文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-06-14

  • Java用Arrays.fill()初始化二维数组的实现

    给大家整理了关于Java的教程,这篇文章主要介绍了Java用Arrays.fill()初始化二维数组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-06-15Java 初始化二维数组

  • java接入创蓝253短信验证码的实例讲解

    java接入创蓝253短信验证码的实例讲解

    给大家整理了关于java的教程,下面小编就为大家分享一篇java接入创蓝253短信验证码的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2022-06-28

  • java swing实现的扫雷游戏及改进版完整示例

    java swing实现的扫雷游戏及改进版完整示例

    给网友朋友们带来一篇关于java的教程,这篇文章主要介绍了java swing实现的扫雷游戏及改进版,结合完整实例形式对比分析了java使用swing框架实现扫雷游戏功能与相关操作技巧,需要的朋友可以参考下

    发布时间:2022-07-17

用户留言