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

 更新时间:2020年11月25日 09:38:06   作者:浪丶小白  
这篇文章主要介绍了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操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于PreparedStatement的setObject作用及说明

    关于PreparedStatement的setObject作用及说明

    这篇文章主要介绍了关于PreparedStatement的setObject作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Springboot 接口需要接收参数类型是数组问题

    Springboot 接口需要接收参数类型是数组问题

    这篇文章主要介绍了Springboot 接口需要接收参数类型是数组问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 使用SpringBoot和JPA实现批量处理新增、修改

    使用SpringBoot和JPA实现批量处理新增、修改

    最近项目需要在JPA中使用ID进行批量更新,所以下面这篇文章主要给大家介绍了关于使用SpringBoot和JPA实现批量处理新增、修改的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java实现简易提款机

    Java实现简易提款机

    这篇文章主要为大家详细介绍了Java实现简易提款机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java中json格式化BigDecimal保留2位小数

    Java中json格式化BigDecimal保留2位小数

    这篇文章主要给大家介绍了关于Java中json格式化BigDecimal保留2位小数的相关资料,BigDecimal是Java中的一个数学库,可以实现高精度计算,文中给出了详细的代码实例,需要的朋友可以参考下
    2023-09-09
  • idea项目全局去掉严格的语法校验方式

    idea项目全局去掉严格的语法校验方式

    这篇文章主要介绍了idea项目全局去掉严格的语法校验方式,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04
  • Java设计模式之观察者模式(Observer Pattern)详解

    Java设计模式之观察者模式(Observer Pattern)详解

    观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都能够自动地得到通知并进行更新,本文将详细的给大家介绍一下Java观察者模式,需要的朋友可以参考下
    2023-07-07
  • 利用Java实现word导入导出富文本(含图片)的详细代码

    利用Java实现word导入导出富文本(含图片)的详细代码

    这篇文章主要为大家详细介绍了利用Java实现word导入导出富文本(含图片),文中的示例代码讲解详细,对大家的学习或工作有一定的帮助,感兴趣的小伙伴可以学习一下
    2024-02-02
  • Springboot+Redis实现API接口限流的示例代码

    Springboot+Redis实现API接口限流的示例代码

    本文主要介绍了Springboot+Redis实现API接口限流的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 实例解析Java日期格式工具类DateUtil.java

    实例解析Java日期格式工具类DateUtil.java

    本文主要对Java日期格式工具类DateUtil.java进行实例解析。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01

最新评论