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()
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()
在 JNA 中读取结构体通常涉及以下几个步骤:
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
方法返回一个包含结构体字段名称的列表,这些字段名称应该与原始结构体的字段顺序相匹配。
Pointer
对象来读取结构体内容。你需要调用 Pointer
的 read
方法,并传递结构体类作为参数。Pointer pAlarmInfo = ...; // 这是从回调函数接收到的指针
NET_DVR_ACS_ALARM_INFO info = new NET_DVR_ACS_ALARM_INFO();
pAlarmInfo.read(info);
这里,pAlarmInfo.read(info)
会从指针 pAlarmInfo
读取数据,并将其存储在 info
结构体实例中。
int field1Value = info.field1;
int field2Value = info.field2;
int field3Value = info.field3;
这样,你就可以在回调函数中使用这些字段值了。