JNA之指针转换对象

## 背景:
最近在做海康相机sdk接入数据程序的过程中,针对一些指针转换成对象遇到了一些问题,现在记录一下转换过车.本文的jna版本是3.0.9

## 代码
``` java
log.debug("交通抓拍结果上传(新报警信息)");
//定义新报警处理对象
NET_ITS_PLATE_RESULT pAlarmInfo = new NET_ITS_PLATE_RESULT();
log.debug("定义新报警处理对象 END");
//在内存中开辟内存区域,用于存放结构体信息
pAlarmInfo.write();
log.debug("在内存中开辟内存区域,用于存放结构体信息 END");
//获取新报警结构体指针
Pointer pInfo = pAlarmInfo.getPointer();
pInfo.write(0, dataPoint.RecvBuffer, 0, pAlarmInfo.size());
pAlarmInfo.read();
```
以上是获取到最外层对象,但是在 NET_ITS_PLATE_RESULT 对象中有一个Pointer类型属性[public Pointer pIllegalInfoBuf;],如何获取该属性呢?

```language
public class NET_ITS_PLATE_RESULT extends Structure {
//结构长度
public int dwSize;
//匹配序号,由(车辆序号,数据类型,车道号)组成匹配码
public int dwMatchNo;
//图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据)
public byte byGroupNum;
//连拍的图片序号(接收到图片组数量后,表示接收完成;接收超时不足图片组数量时,根据需要保留或删除)
...
/**
* 为0~数字格式时,为老的违章类型,wIllegalType、dwCustomIllegalType参数生效,赋值国标违法代码。
* 为1~字符格式时,pIllegalInfoBuf参数生效。老的违章类型,wIllegalType、dwCustomIllegalType参数依然赋值国标违法代码
*/
//违法代码字符信息结构体指针;指向NET_ITS_ILLEGAL_INFO
public Pointer pIllegalInfoBuf;
//违章信息格式类型; 0~数字格式, 1~字符格式
public byte byIllegalFromatType;
...
}

```
以下是获取改属性的具体方法
```
// 获取字符违法代码
//结构体
NET_ITS_ILLEGAL_INFO illegal_info = new NET_ITS_ILLEGAL_INFO();
//将结构体的字段写入到本地内存中
illegal_info.write();
//从指针的数组中写入数据到结构体的指针
Pointer pointer = illegal_info.getPointer(); pointer.write(0,pAlarmInfo.pIllegalInfoBuf.getByteArray(0,illegal_info.size()),0,illegal_info.size());
//结构体的字段读入到内容中
illegal_info.read();
log.info("**字符违法代码*{}",new String(illegal_info.byIllegalInfo));
```

posted @ 2020-12-11 16:03  喜中5000万  阅读(2042)  评论(0编辑  收藏  举报