当前位置: 首页 > news >正文

jna总结1

java使用JNA调用dll的方法_(jnacalldllapi) native.loadlibrary(path-CSDN博客

  JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so【shared object】文件)。

    JNI是Java调用原生函数的唯一机制,JNA就是建立在JNI之上,JNA简化了Java调用原生函数的过程。JNA提供了一个动态的C语言编写的转发器(实际上也是一个动态链接库,在Linux-i386中文件名是:libjnidispatch.so)可以自动实现Java与C之间的数据类型映射。从性能上会比JNI技术调用动态链接库要低

java高级用法之:调用本地方法的利器JNA_native.load-CSDN博客 

JNA加载native lib的流程
在讲解JNA加载native lib之前,我们先回顾一下JNI是怎么加载native lib的呢?

在JNI中,我们首先在java代码中定义要调用的native方法,然后使用javah命令,创建C的头文件,然后再使用C或者C++来对这个头文件进行实现。

接下来最重要的一步就是将生成的动态链接库添加到JAVA的classpath中,从而在JAVA调用native方法的时候,能够加载到对应的库文件。
————————————————

JNI的替代者—使用JNA访问Java外部功能接口-CSDN博客 

先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即可。首先看下JNI调用C/C++的过程,注意写程序时自下而上,调用时自上而下。

可 见步骤非常的多,很麻烦,使用JNI调用.dll/.so共享库都能体会到这个痛苦的过程。如果已有一个编译好的.dll/.so文件,如果使用JNI技 术调用,我们首先需要使用C语言另外写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的 dll/so中公布的函 数。然后再在Java中载入这个库dll/so,最后编写Java  native函数作为链接库中函数的代理。经过这些繁琐的步骤才能在Java中调用 本地代码。因此,很少有Java程序员愿意编写调用dll/.so库中原生函数的java程序。这也使Java语言在客户端上乏善可陈,可以说JNI是 Java的一大弱点!

那么JNA是什么呢?

JNA(Java Native Access)是一个开源的Java框架,是Sun公司推出的一种调用本地方法的技术,是建立在经典的JNI基础之上的一个框架。之所以说它是JNI的替 代者,是因为JNA大大简化了调用本地方法的过程,使用很方便,基本上不需要脱离Java环境就可以完成。

如果要和上图做个比较,那么JNA调用C/C++的过程大致如下:

可以看到步骤减少了很多,最重要的是我们不需要重写我们的动态链接库文件,而是有直接调用的API,大大简化了我们的工作量。

JNA只需要我们写Java代码而不用写JNI或本地代码。功能相对于Windows的Platform/Invoke和Python的ctypes。

java使用jna调用动态库踩的坑_jna native.load-CSDN博客 

 

相关文章:

  • CSS 盒子模型与元素定位
  • Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题
  • armv7 backtrace
  • Qt开发经验 --- 避坑指南(14)
  • 数据库与SQL核心技术解析:从基础到JDBC编程实战
  • 软件体系结构(Software Architecture)
  • 【漫话机器学习系列】252.零损失(0-1 Loss)
  • 大数据时代的安全挑战——数据泄露如何悄然发生?
  • 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程
  • 力扣刷题Day 46:搜索二维矩阵 II(240)
  • 【系统架构师】2025论文《系统可靠性设计》【含记忆口诀】
  • 用ffmpeg压缩视频参数建议
  • path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2
  • 安装typescript时,npm install -g typescript报错
  • 编程技能:字符串函数02,strcpy
  • 系统思考:个人与团队成长
  • Pandas学习笔记(四)
  • 并行发起http请求
  • Python Cookbook-7.9 访问 MySQL 数据库
  • python实现用户登录
  • 复旦大学与上海杨浦共建市东医院
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 反制美国钢铝关税!印度拟对美国部分商品征收关税
  • 董军同法国国防部长举行会谈
  • 人民网评:守护健康证的“健康”,才有舌尖上的安全
  • 湖北石首市委副书记、市长付勇接受审查调查