Java | 通过JNA调用c语言dll
java
之前发在我的CSDN博客中,现在搬到简书上来。
Java可以通过JNI/JNA调用本地其余语言生成的库文件。以调用c语言为例,可以将c的函数导出dll,java通过JNI/JNA来调用。
本文涉及范围
- window平台
- Java调用c/c++
JNI vs JNA
JNI | JNA |
---|---|
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
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Java | 通过JNA调用c语言dll