Java: 在IntelliJ IDEA中,使用Java调用Dynamic Link Library(DLL)

    技术2025-01-22  47

    DLL: IntelliJ IDEA中调用Dynamic Link Library(DLL)

    关于封装C语言的 Dynamic Link Library(DLL) 的方法,可以查看我的另一篇博客 这里.

    1. 首先,在IntelliJ IDEA中新建Maven项目.

    在Maven中引入 JNA(Java Native Access)依赖。

    <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.5.0</version> </dependency>

    2. 编写DLLUtil工具类,使用JNA连接CLibrary调用DLL接口

    将 .dll 文件放入项目的 resources 下, ps: .dll放到其他位置可能会出现无法找到dll模块的 error(Exception in thread "main" java. lang . UnsatisfiedL inkError: Unable to load library ' encryptiondll')。

    DLL调用

    import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public class DLLUtil { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.load("encryptiondll", CLibrary.class); String MD5Encrypt(String text); } public static void main(String[] args) { String md5Text = CLibrary.INSTANCE.MD5Encrypt(text); System.out.println(md5Text); } }

    调用成功,返回正确结果。

    注意

    在跨语言调用DLL的时候,另一个需要注意的点是生成DLL的 编译模式(Release / Debug) 以及生成DLL的 文件位数(x86 / x64)。

    正常来说,生成DLL的编译模式,必须为 Release 模式,而文件位数视具体应用而言,若在博主 所在的环境(64位JDK)下,那么DLL的位数必须与环境位数一致,亦即,编译出 x64 的DLL;

    如果此时,使用编译出的 x86(32位)的DLL,则会报 error(Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。)! 如果此时,使用 Debug编译模式下生成的DLL,也会报 error(Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。)!

    Processed: 0.014, SQL: 9