自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 extends Structure> T pointer2Structure(Pointer pParam,Class<T> 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;
}

  

最新文章

  1. PL/SQL快速选中一行并执行
  2. weex逻辑控制
  3. Java ServletContext 详解
  4. Form表单中的三种查询方法
  5. Swift 委托/代理设计模式
  6. [译]Stairway to Integration Services Level 10 - 高级事件活动
  7. $.each()遍历Json对象
  8. mybatis入门介绍二
  9. PHP MySQL Update
  10. 【洛谷P3275】糖果
  11. ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】
  12. idea maven列表有问题的
  13. mysql批量插入数据优化
  14. ros查看摄像头是否打开正常
  15. Python2.7-hashlib
  16. Appscan_web安全测试工具 (含修改启动浏览器的方法)
  17. IntelliJ IDEA 2017.2安装
  18. 十款效果惊艳的Html案例(一)
  19. jquery-uploadify传参方法
  20. 二进制部署etcd集群

热门文章

  1. 搭建Web开发环境JavaEE_Eclipse
  2. java调用dll库
  3. 关于tcp的keepalive
  4. javaweb基础(36)_jdbc进行批处理
  5. P2082 区间覆盖(加强版)
  6. git移除某文件夹的版本控制
  7. redis事务中的WATCH命令和基于CAS的乐观锁
  8. java基础 final 修饰成员变量 只能赋值一次问题
  9. WKWebView 屏蔽长按手势 - iOS
  10. windows 编译安卓iconv 库