0. 注意
Java使用JNA方式調用DLL時,需保證JDK位數與DLL位數相同,即,如果你本地JDK版本是64位的,那麼必須編譯64位版本DLL,才能使用JNA方式來調用
1. 引包
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
2. DLL接口
DLL聲明接口格式如下
function CreditTransABC(strIn, StrOut:pChar):Integer; stdcall;
Java聲明對應接口如下。其中Java接口類中方法名必須與DLL中一致
public interface IHiBankLibrary extends Library {
IHiBankLibrary INSTANCE = Native.loadLibrary("E:\\JavaDemo\\jna-demo\\data\\HiBankW64.dll", IHiBankLibrary.class);
int CreditTransABC(String strIn, byte[] strOut);
}
3. 調用 DLL接口
public class HiBankJnaExecutor {
public void creditTransABC() {
byte[] strOut = new byte[1024];
IHiBankLibrary.INSTANCE.CreditTransABC("1", strOut);
String result = new String(strOut, StandardCharsets.UTF_8).trim();
System.out.println(result);
}
}
4. 測試
@Test
public void CreditTransABC() {
new HiBankJnaExecutor().creditTransABC();
}
GitHub:https://github.com/dkbnull/JavaDemo