Java JNR-FFI如何从一个指针到另一个指针读取结构数组
我正在尝试使用与C库接口 有一个函数:Java JNR-FFI如何从一个指针到另一个指针读取结构数组,java,c,struct,ffi,jnr,Java,C,Struct,Ffi,Jnr,我正在尝试使用与C库接口 有一个函数: public static class zbc_zone extends Struct { protected zbc_zone(Runtime runtime) { super(runtime); } public final Unsigned64 zbz_length=new Unsigned64(); public final Unsigned64 zbz_start=new Unsigned64()
public static class zbc_zone extends Struct
{
protected zbc_zone(Runtime runtime) {
super(runtime);
}
public final Unsigned64 zbz_length=new Unsigned64();
public final Unsigned64 zbz_start=new Unsigned64();
public final Unsigned64 zbz_write_pointer=new Unsigned64();
public final Unsigned8 zbz_type=new Unsigned8();
public final Unsigned8 zbz_conditions=new Unsigned8();
public final Unsigned8 zbz_attributes=new Unsigned8();
public final Unsigned8 zbz_pad1=new Unsigned8();
public final Unsigned8 zbz_pad2=new Unsigned8();
public final Unsigned8 zbz_pad3=new Unsigned8();
public final Unsigned8 zbz_pad4=new Unsigned8();
public final Unsigned8 zbz_pad5=new Unsigned8();
}
public int zbc_list_zones(@In Pointer dev,@In long sector,
@In zbc_reporting_options options,@Out PointerByReference zones,
@Out IntByReference nr_zones);
int zbc_列表_区域(结构zbc_设备*开发,uint64_t扇区,枚举
zbc_报告选项ro,结构zbc_区域**区域,无符号整数*
nr_区)
如何从参数区域读回结构数组
第二个问题:nr_zones参数声明是否正确?结果整数为负,应为正。我尝试使用ShortByReference,给出了一个合理的结果,但我认为这不正确
我尝试了以下方法来读取第一个元素,但它不起作用(结果为零):
zbc_区域结构:
public static class zbc_zone extends Struct
{
protected zbc_zone(Runtime runtime) {
super(runtime);
}
public final Unsigned64 zbz_length=new Unsigned64();
public final Unsigned64 zbz_start=new Unsigned64();
public final Unsigned64 zbz_write_pointer=new Unsigned64();
public final Unsigned8 zbz_type=new Unsigned8();
public final Unsigned8 zbz_conditions=new Unsigned8();
public final Unsigned8 zbz_attributes=new Unsigned8();
public final Unsigned8 zbz_pad1=new Unsigned8();
public final Unsigned8 zbz_pad2=new Unsigned8();
public final Unsigned8 zbz_pad3=new Unsigned8();
public final Unsigned8 zbz_pad4=new Unsigned8();
public final Unsigned8 zbz_pad5=new Unsigned8();
}
public int zbc_list_zones(@In Pointer dev,@In long sector,
@In zbc_reporting_options options,@Out PointerByReference zones,
@Out IntByReference nr_zones);
JNR接口:
public static class zbc_zone extends Struct
{
protected zbc_zone(Runtime runtime) {
super(runtime);
}
public final Unsigned64 zbz_length=new Unsigned64();
public final Unsigned64 zbz_start=new Unsigned64();
public final Unsigned64 zbz_write_pointer=new Unsigned64();
public final Unsigned8 zbz_type=new Unsigned8();
public final Unsigned8 zbz_conditions=new Unsigned8();
public final Unsigned8 zbz_attributes=new Unsigned8();
public final Unsigned8 zbz_pad1=new Unsigned8();
public final Unsigned8 zbz_pad2=new Unsigned8();
public final Unsigned8 zbz_pad3=new Unsigned8();
public final Unsigned8 zbz_pad4=new Unsigned8();
public final Unsigned8 zbz_pad5=new Unsigned8();
}
public int zbc_list_zones(@In Pointer dev,@In long sector,
@In zbc_reporting_options options,@Out PointerByReference zones,
@Out IntByReference nr_zones);
有三种方法可以帮助您: