JNA 调用 DLL
前言
最近在对接医保支付,需要调用医保提供的 DLL 文件,这里简单记录一下。
实现
引入Maven
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.1</version>
</dependency>
版本号可自行更改,目前最新的为5.13.0。
代码
import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
public class Test {
public interface CLibrary extends Library {
/**
* 这里的 DLL 路径可以用绝对路径也可以用相对路径
*/
CLibrary INSTANCE = Native.loadLibrary("D:\\yb\\SiInterface.dll", CLibrary.class);
/**
* 这里方法要和 DLL 中的方法对应起来
*/
int BUSINESS_HANDLE(String inputData, Memory outputData);
}
public static void main(String[] args) {
// 请求参数
String inputData = "";
// 响应参数
Memory outputData = new Memory(512 * 512);
// 发送请求,出入参的格式要和 DLL 中的对应起来
CLibrary.INSTANCE.BUSINESS_HANDLE(inputData, outputData);
String result = outputData.getString(0, "GBK");
System.out.println(result);
}
}
代码和网上查到的没什么区别。
注意事项
- 调用的 DLL 位数要与 JDK 位数相同,比如都是 32 位或者 64 位。
- DLL 只能在 Windows 环境下调用,Linux 环境下需要调用
.so
文件。 - 需要安装
Microsoft Visual C++
运行库,具体什么版本应该和 DLL 有关系,比如我这个安装 2008 即可,可以挨个试一下或者全部装一遍,注意位数也要和 DLL 位数相同。