第一次使用JAVA调用dll文件,调试过程中出现报错:java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
请有经验的朋友帮忙看看是什么原因导致。
谢谢
操作系统:win10 64x
JDK版本:jdk 1.8.0 (64位)
DLL文件是打包为64位
public interface GuidScreenService extends Library {
// dhnetsdk.dll
GuidScreenService INSTANCE = Native.load("dhnetsdk.dll", GuidScreenService.class);
/***
* 用户登录服务
* @return
*/
Integer CLIENT_LoginEx(String pchDVRIP, char wDVRPort, String pchUserName, String pchPassword, int nSpecCap,
Pointer pCapParam, LpnetDeviceInfo lpDeviceInfo, int error);
}
bean 文件:
public class LpnetDeviceInfo extends Structure {
public byte sSerialNumber;
public byte byAlarmInPortNum;
public byte byAlarmOutPortNum;
public byte byDiskNum;
public byte byDVRType;
}
调试代码
public class ScreenTest {
public static void main(String [] args){
GuidScreenService service = GuidScreenService.INSTANCE;
String ip = "127.0.0.1";
char port = 10000;
String user = "user";
String pass = "123123";
LpnetDeviceInfo deviceInfo = new LpnetDeviceInfo();
Integer result = service.CLIENT_LoginEx(ip, port, user, pass, 0, null,deviceInfo , 0);
System.out.println(result);
}
}
Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:277)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:461)
at com.sun.jna.Library$Handler.<init>(Library.java:192)
at com.sun.jna.Native.load(Native.java:596)
at com.sun.jna.Native.load(Native.java:570)
at com.ycig.psticp.access.service.dll.GuidScreenService.<clinit>(GuidScreenService.java:18)
经过检查,文件是可以找到,应该是加载不成功
dll文件可以顺利加载
已找到原因,是jdk的版本与dll文件的不匹配导致;
之前安装的jdk是32位,而dll是64位编译文件,所以报错;将JDK更换为64位,报错消失