近日遇到了dll文件加载的问题,特别记录一下,防止以后忘记
加载dll文件,主要分为以下几个步骤:
1.查看dll文件信息
打开vs command 切换到当前目录
输入命令dumpbin -exports dllname.dll查看文件信息
.主要查看函数信息
dumpbin /headers dllname.dll 查看位数
2.导入jar包
直接通过maven导入:
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
下载JNA包导入:
github下载链接:https://github.com/java-native-access/jna
3.将dll文件放在resource下(idea)(如果加载不出来,可以直接放到jdk bin下,或者直接使用绝对路径)
4.加载dll文件
public class JNADllCall {
public interface CLibrary extends Library {
// DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径。(此处:(Platform.isWindows()?"msvcrt":"c")指本地动态库msvcrt.dll)
CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
CLibrary.class);
// 声明将要调用的DLL中的方法,可以是多个方法(此处示例调用本地动态库msvcrt.dll中的printf()方法)
void printf(String format, Object... args);
}
public static void main(String[] args) {
CLibrary.INSTANCE.printf("Hello, World!");
}
}
注意:dll文件的位数一定要与项目jdk位数相同,如果不同,可以切换jdk版本