paip.java 调用c++ dll so总结

时间:2021-12-03 19:27:23

paip.java 调用c++ dll so总结



///////JNA (这个ms sun 的)

我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA直接调用C的库

JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同。JNA没有使用Annotation,而是通过编写一般的Java代码来实现。



P/Invoke是.NET平台的机制。而JNA是Java平台上的一个开源类库,和其他类库没有什么区别。只需要在classpath下加入jna.jar包,就可以使用JNA



JNA提供了一个动态的C语言编写的转发器,可以自动实现Java和C的数据类型映射。你不再需要编写那个烦人的C动态链接库。



当然,这也意味着,使用JNA技术比使用JNI技术调用动态链接库会有些微的性能损失。可能速度会降低几倍。但对于绝大部分项目来说,影响不大。



作者Attilax  艾龙,  EMAIL:1466519819@qq.com

来源:attilax的专栏

地址:http://blog.csdn.net/attilax



///////jnative 一个开源项目.



jnative java/jna  java

jna的量基本上是jnatv的10倍..





参考

Java调用.dll文件 - 抹去浮华,沉淀深度 - ITeye技术网站.htm (jnative)

学习JNA,Jnative个人总结 - 80后的梦想 - ITeye技术网站.htm

(impt)Java JNA 详解 - 梦想是奢侈品,向奢侈品进军 - 博客频道 - CSDN.NET.htm

本文原名《使用JNA方便地调用原生函数》发表于2009年3月的“程序员”杂志上。

[-]



    介绍

    实现原理

        调用原生函数

            使用JNA调用原生函数

            调用原生函数的模式

    和原生代码的类型映射

        和操作系统数据类型的对应表

        支持常见的数据类型的映射

    模拟结构体

        使用JNA调用使用Struct的C函数

            说明

        模拟复杂结构体

            结构体内部可以包含结构体对象的数组

            结构体内部可以包含结构体对象的指针的数组

    代码

        通过回调函数实现原生代码调用Java代码

        回调函数说明

    模拟指针

        使用PointerByReference模拟指向指针的指针

        模拟指针

        类详解