Unable to load library ‘XXX.dll’: Native library (win32-x86/XXX.dll…
这是我第一次遇见这个问题,找了很多天,希望能给您提供思路!!!
JAN调用dll :
问题一:关于JDK 与 dll文件 32位/64位的问题
通过cmd–>java -version 查看JDK(下图为32位)
问题二: 注册(regsvr32 XXX.dll)
我这边是将第三方给的压缩包全部复制到\windows\system32下 (可能会出现需要管理员权限的问
题,user32.dll 与msvcp60.dll 复制不进去)如果出现兼容问题 请在cmd上右键 以管理员身份运
行,然后注册,如果还是有问题可以试着 进入(cd) \windows\sysWOW64下注册(我这边出现
下图中的错误 ,但已经注册成功了!如果有人知道为什么请指点 我是小白一个)
问题三:下载JNA
我这边是用的springBoot 在pom.xml文件中加入配置 如果不是请下载JNA的jar包!
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
将dll文件与新建的类放在一个包下并测试
public class HelloWorld {
public interface CLibrary extends Library {
String dllPath = CLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"zhiGongHiscomminterface.dll";
CLibrary INSTANCE = (CLibrary)Native.loadLibrary(dllPath,CLibrary.class);
}
public static void main(String[] args) {
System.out.println(CLibrary.dllPath);
System.out.println("===============================");
System.out.println(CLibrary.INSTANCE);
}
}
** 问题四:左斜杠 与 右斜杠
我最后在服务器上加载dll文件是 测试路径的dllPath 加载不到(这个是左斜杠的)当我把路径的左斜杠改为由斜杠时就可以加载到(不明白为什么(>_<) ! )
注:左斜杠为单线 右斜杠为双线
========================================================
关于java加载dll文件的问题,后续经高人指点,有了新的变化
首先需要确认一个问题 我的dll在jdk32位的环境下可以使用 但是换成jdk64位就会出现问题,百度上说这个需要看dll文件编译时是 32位的还是 64 位的。这个问题我最后将jdk换成了32位的。
调用dll:
首先将dll放置在任意文件夹下
然后在环境变量中配置刚刚放置dll文件的路径,确保可以找到dll ,(这样就不用将dll文件放在window系统的system32下了)
然后在Java程序中直接调用文件名就可以了(下面的zhiGongHiscomminterface.dll为文件名)
CLibrary INSTANCE = (CLibrary)Native.loadLibrary(”zhiGongHiscomminterface.dll“,CLibrary.class);