依赖
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
代码
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Test {
public interface CLibrary extends Library {
// 定义并初始化接口的静态变量
CLibrary TEST = (CLibrary) Native.loadLibrary("testdd", CLibrary.class);//testdd dll名称
void test1();//dll中的方法名
}
public synchronized static void test() {
System.setProperty("jna.encoding", "GBK");
CLibrary.TEST.test1();
}
public static void main(String[] args) {
test();
}
}
运行结果截图
testdd传送门(需要的可以私聊我)
常见的问题及处理办法:
1.找不到指定的程序(调用dll方法名错误,不知道方法名的可用Dependency.exe查看)
2.无效的内存访问(两个原因导致:jdk的bin目录下没有放置对应的dll;方法调用数据传参对不上)
3.jdk的位数和dll的位数对不上(如:64位的jdk调用32位的dll会出现错误)
4.发布到服务器时我遇到了一个奇怪的问题,实现层直接用类名调用dll方法会出现无法找到dll方法所在的这个类。我的解决办法是把调用dll的这个类先new出来再进行调用问题成功解决,但一直没有想明白为什么,有大佬帮我解答一下吗?