java调用dll使用过程详解
java安装
1、从官网下载JDK:jdk-8u281-windows-x64.exe,需要先注册用户
2、双击安装到D:\JAVA目录,安装后设置系统环境变量path包括D:\Java\jdk1.8.0_281\bin,classpath包括D:\Java\jdk1.8.0_281\lib,然后在cmd窗口可通过java -version来看看是否安装正常
3、下载idea开发工具(ideaIC-2020.3.2.exe),该工具会自动找到jdk相关信息
建立dll调用工程
4、新建java项目testlib,用于测试dll库的访问
5、下载jna包:在https://github.com/java-native-access/jna/blob/master/README.md页面中下载jna-5.6.0.jar和jna-platform-5.6.9.jar,保存到D:\java\jna(也可以是其他目录)
6、让testlib项目可找到这两个包:
1、在idea中添加下载的这两个jar文件路径到testlib项目的library搜索路径中(过程参考:https://blog.csdn.net/d729332647/article/details/80413568的)
2、或者创建libs目录,将两个jar包放入该目录,在idea中右键点击该包选择add as library即可
写作dll调用代码
7、在testlib.java文件中加入如下代码即可运行(参考:https://www.cnblogs.com/new-life/p/9345840.html):
import com.sun.jna.Library;
import com.sun.jna.Native;
public class testlib {
/**
* DLL动态库调用方法
* @Description: 读取调用CDecl方式导出的DLL动态库方法
* @author: LinWenLi
* @date: 2018年7月18日 上午10:49:02
*/
public interface CLibrary extends Library {
// DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径。(此处:(Platform.isWindows()?“msvcrt”:“c”)指本地动态库msvcrt.dll)
CLibrary INSTANCE = (CLibrary) Native.loadLibrary(“msvcrt”, CLibrary.class);
// 声明将要调用的DLL中的方法,可以是多个方法(此处示例调用本地动态库msvcrt.dll中的printf()方法)
void printf(String format, Object... args);
}
public static void main(String[] args) {
CLibrary.INSTANCE.printf("Hello, World!");
}
}
dll如果调用第三方库时注意事项
8、dll生成时,注意需要去除#pragma链接库的方式,需要设置到link配置附加依赖项参数中,否则java会load失败
9、dll运行时,依赖的第三方lib库对应的dll需要放在该dll相同目录下,否则java也会load失败。查看该dll依赖哪些dll可用dependencywalker工具来查看(下载路径:http://dependencywalker.com/)