JNA 备注

最近写JNA调用DLL的代码比较多。应该这样说,C的精华在于对指针的灵活运用,而用JNA调用C/C++最痛苦的也在于此。你不知道该用什么样的方式去对应C/C++的方法,特别是遇到指针、结构体指针、指针作为出参、入参或返回值等等。本文主要把最近遇到并解决了一些问题,备注如下:

1、C++的工程被JNA调用前,要增加extern "C";否则的话方法名字会无法识别;

2、byte[]作为入参的时候可直接使用java的byte[],若作为出参使用ByteByReference;

3、指针和引用都使用ByReference,例如int*或int& 都用IntByReference;

4、结构体作为参数传值时记得增加write方法,例如strXX.write(),用以将值写入内存;反之则采用read方法;

5、结构体指针,在C/C++里是需要强转的情况;可以直接用Pointer(不论是作为返回值,还是入参),也就相当于用void*的指针,最后用Pointer的write方法去写值就可以;

6、可以通过setProperty方法设置编码格式和路径,如下:

static{
        System.setProperty("jna.encoding","utf-8");
        System.setProperty("jna.library.path","E://lib");
    }

7、用JNA时,记得释放资源;你相当于在操作new或malloc;

时间: 2024-09-29 04:59:16

JNA 备注的相关文章

如何用代码读取Office Online Server2016的文档的备注信息

前言 在一个项目上客户要求读取office online server 2016的对文档的备注信息,如下图: 以前思路老纠结在OOS这个在线上,总有以为这个信息存储在某个列表中,其实错了,这个备注信息其实就是word文档的备注信息,微软采用openxml开发的OOS,因此我也采用openxml读取备注信息的思路进行尝试,结果发现原来是可以的,成功效果图如下: 注意: OpenXml格式只有office2007以及以上版本才支持的格式,如果office97-2003格式的文档是二进制格式的文档,o

Flask备注4(Structure)

Flask备注4(Structure) package 通过Flask可以非常简单的通过一个module(一个py文件)创建一个简单的application.这种简单程序的文件结构如下: /yourapplication /yourapplication.py /static /style.css /templates layout.html index.html login.html ... 这种结构对于较大或者复杂的程序并不合适.对于复杂程序可以通过python自带的package结构来组织

List扩展方法汇总(仅备注)

不管在c/s还是b/s的c#语言开发程序中,经常会用到List的扩展方法,尤其在json格式的数据和服务端交互越来越流行,很多时候总是在开发使用到的时候才去搜索有些扩展方法或者linq的用法,在这里,我们只是做一个备注 因为linq没有必要系统的学习,我们只要简单的在list的扩展会使用即可,至少我只这么认为的 本文没有任何技术性,只是备注list或者list泛型的扩展方法,不至于在您不熟悉但是又使用到的时候到处搜索 1 public sealed class Employee 2 { 3 pu

logback备注

<?xmlversion="1.0"encoding="UTF-8"?> <!-- <configuration>包含的属性 scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟. debug: 当此属性设置为true时,将打印出logb

读取数据库信息构建视图字段的备注信息,方便程序代码生成

在很多情况下,我们开发都需要有一个快速的代码生成工具用来提高开发效率,代码生成工具很多信息都是读取数据库的表.视图等元数据进行对象表信息的完善,有了这些信息,我们就可以在普通的实体类代码里面添加属性字段的中文注释,或者在Winform或者Web界面的快速生成的时候,可以在查询框或者界面编辑的时候,充当标签提示等处理信息.但是,一般情况下视图的备注信息是没有的,但是视图和表之间是存在一定的关系的,虽然不同数据库系统对于它们的信息对应不一定一致,但是我们可以把它们的对应关系寻找出来就可以给视图字段增

Image.FrameDimensionsList 属性备注

Image.FrameDimensionsList 属性 .NET Framework 2.0 获取 GUID 的数组,这些 GUID 表示此 Image 中帧的维数. 命名空间:System.Drawing程序集:System.Drawing(在 system.drawing.dll 中) 语法 C# public Guid[] FrameDimensionsList { get; } Image.FrameDimensionsList 属性 .NET Framework 2.0 获取 GUI

Atitit.java&#160;jna&#160;&#160;调用c&#160;&#160;c++&#160;dll的原理与实践&#160;&#160;总结&#160;&#160;v2&#160;&#160;q27

Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需要定义一个接口,继承自Library 或StdCallLibrary2 3.2. 2)接口内部定义2 4. 数据类型映射 NA官方给出的默认类型映射表如下:3 5.  JNA能完全替代JNI吗?3 6. 参考4 1. Jna简单介绍 原来使用JNI,你必须手工用C写一个动态链接库,在C语言中映射Ja

文件夹如何添加备注(保证可以)

网上很多方法都有人说试过了,不可以.其实不是不可以,他们都没有说完整 今天自己弄了下,弄出来了,废话不多说先上图 1.获得desktop.ini文件:文件存在于文件夹中,这是文件夹配置文件,默认是没有这个文件的 产生方法1:需要先对文件夹属性(比如文件夹图标)进行改变操作,这样才能产生文件夹下产生desktop.ini文件 改变图标:一般这样右键文件夹选择属性-->自定义-->更换图标-->随便选择一个文件夹的图标-->确定-->应用-->确定 产生方法2:自己建立的也

Linux下TC使用说明 &amp; 使用备注 ZZ

一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如下图所示. 接收包从输入接口(Input Interface)进来后,经过流量限制(Ingress Policing)丢弃不符合规定的数据包,由输入多路分配器(Input De-Multiplexing)进行判断选择:如果接收包的目的是本主机,那么将该包送给上层处理:否则需要进行转发,将接收包交到转