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));
```


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM