目录

今日说码

点滴记录中国代码进程

X

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 位数相同。

标题:JNA 调用 DLL
作者:96XL
地址:https://solo.96xl.top/articles/2023/07/31/1690769509019.html