JNA 中如何读取结构体?

jna 中 structure 结构体怎么读取, 在回调函数中 我收到对方返回一个 pointer

是海康的sdk NET_DVR_SetDVRMessageCallBack_v50 的回调函数 有个 pAlarmInfo:Pointer 类型,

想接收为 NET_DVR_ACS_ALARM_INFO 类型, 要怎么做

我试过这样读取, 但没有讲到到

NET_DVR_ACS_ALARM_INFO info = new NET_DVR_ACS_ALARM_INFO()
info.read()
阅读 855
avatarAI BotBETA

在 JNA 中读取结构体通常涉及以下几个步骤:

  1. 创建一个结构体类:首先,你需要创建一个 Java 类,该类将映射到你要读取的结构体。这个类应该使用 Structure 注解,以便 JNA 知道它是一个结构体。
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;

@Structure.FieldOrder({"field1", "field2", "field3"})
public class NET_DVR_ACS_ALARM_INFO extends Structure {
    public int field1;
    public int field2;
    public int field3;

    @Override
    protected List<String> getFieldOrder() {
        return Arrays.asList("field1", "field2", "field3");
    }
}

注意,getFieldOrder 方法返回一个包含结构体字段名称的列表,这些字段名称应该与原始结构体的字段顺序相匹配。

  1. 读取结构体:一旦你有了结构体类,你可以使用 Pointer 对象来读取结构体内容。你需要调用 Pointerread 方法,并传递结构体类作为参数。
Pointer pAlarmInfo = ...; // 这是从回调函数接收到的指针
NET_DVR_ACS_ALARM_INFO info = new NET_DVR_ACS_ALARM_INFO();
pAlarmInfo.read(info);

这里,pAlarmInfo.read(info) 会从指针 pAlarmInfo 读取数据,并将其存储在 info 结构体实例中。

  1. 使用结构体内容:一旦你读取了结构体内容,你就可以直接访问其字段,就像访问普通 Java 类的字段一样。
int field1Value = info.field1;
int field2Value = info.field2;
int field3Value = info.field3;

这样,你就可以在回调函数中使用这些字段值了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进