Java | 通过JNA调用c语言dll

作者 : 开心源码 本文共950个字,预计阅读时间需要3分钟 发布时间: 2022-05-13 共165人阅读

java

之前发在我的CSDN博客中,现在搬到简书上来。

Java可以通过JNI/JNA调用本地其余语言生成的库文件。以调用c语言为例,可以将c的函数导出dll,java通过JNI/JNA来调用。

本文涉及范围

  • window平台
  • Java调用c/c++

JNI vs JNA

JNIJNA
c和Java互调只能Java调c
编写复杂,需要先根据Java生成对应c的函数公告,而后用c来完成函数实现,最后生成dll,供Java调用直接由c生成dll供Java调用
性能优于JNA底层调用JNI

Java通JNA调用dll

  • 编写c代码,导出dll
    // myDll.h    #define JNADLL extern "C" __declspec(dllexport)    JNADLL int add(int x, int y);        // myDll.cpp    #include "myDll.h"    void int add(int x, int y)    {        return x + y;    }
  • 编写Java接口代码
    // dll接口    public interface JNATestDll extends Library       {        JNATestDll instanceDll  = (JNATestDll)Native.loadLibrary("myDll",JNATestDll.class);        public int add(int x, int y);    }        // 测试驱动    public class CallDLLJNA     {        public static void main(String[] args)         {            JNATestDll jnaDemo=JNATestDll.instanceDll;            int c = jnaDemo.add(1, 2);            System.out.println(c);        }    }

不得不看

  • 待导出的c函数前肯定要增加extern “C”,不然导出的dll JNA找不到
 #define JNADLL extern "C" __declspec(dllexport)JNADLL int add(int x, int y);
  • 导出的dll在Java工程的存放路径(任意路径皆可,推荐第一种)
    • lib/win32-x86-64 文件下, 将此文件设为资源文件(此路径在Intellij IDEA上测试过,Eclipse未测试)
    • 将dll所在路径设为环境变量
    • 本地JDK路径下
    • 系统System32文件夹下

原始博客地址

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Java | 通过JNA调用c语言dll

发表回复