java jna 安装_Java-JNA使用心得2

自5月初第一次尝试使用Java封装调用C的dll之后,已经先后经历了3次小项目了。

上月末是最近的一次项目实际,任务来的急时间又少,还好在加班加点后还是完成了任务,并把第二次没有实现的功能给实现了(C的SDK获取到图片后由Java从内存中取出保存到本地)。

时间已经过去快1个月了,现把当初“攻克”的小难题给记录一下。

现讲一下当时的状态,这个C的SDK是相机的SDK,使用账户密码登录相机,并注册一个回调,当相机有抓拍之后会触发回调函数,然后Java把数据从SDK中取出保存。

之前一直没搞定的是Java通过SDK返回的图片指针把图片从内存中取出保存,这次趁着这个小项目而好好研究了一番。

实现关键代码如下:

1、先是SDK中返回数据的结构体

typedef struct tagPhotoHandler

{

CHAR *apcData[PIC_NUM];//图片数据的指针数组

ULONG aulDataLen[PIC_NUM];//每张图片的数据长度

...

}

2、然后是Java对这个结构体的封装

public static class tagPhotoHandler extends Structure

{

public static class ByReference extends myStructur implements Structure.ByReference{}

public ByteByReference[] apcData = new ByteByReference[PIC_NUM];

public int[] aulDataLen = new int[PIC_NUM];

...

}

3、Java通过指针去内存中取数据

tagPhotoHandler.ByReference tumph = new tagPhotoHandler.ByReference();

ByteByReference[] picData = tumph.apcData;

Pointer p = picData[i].getPointer();

Byte[] image = p.getByteArray(0,tumph.aulDataLen[i]);

4、其他一些较实用的东西

Pointer pConfig = new Memory(length);

//指针转结构体

public static T pointer2Structure(Pointer pParam,Class res)

{

T Param;

Param = res.newInstance();

Pointer facePointer = Param.getPointer();

facePointer.write(0,pParam.getByteArray(0,Param.size()),0,Param.size());

Param.read();

return Param;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值