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

  • 相关阅读:
    5. JVM虚拟机栈
    4. 程序计数器
    3. JVM运行时数据区
    2. 类加载
    1. JVM体系结构
    SpringCloud 网关组件Gateway
    SpringCloud Hystrix断路器的基本使用
    SpringCloud Ribbon和Feign 的使用和源码分析
    反向代理的概念
    事务mysql
  • 原文地址:https://www.cnblogs.com/chengzhihua/p/14120883.html
Copyright © 2020-2023  润新知