指向结构数组的指针

时间:2013-07-17 13:14:27

标签: java jna

考虑我有以下C结构定义:

struct StructA {
    int a;
    int b;
};

struct StructB {
    struct A *as;
    int count;
};

因此,as的{​​{1}}字段指向大小为StructB的{​​{1}}数组。然后,我使用以下类在Java中表示StructA

count

但是,我如何在Java中表示struct StructA?由于public class StructA extends Structure { public int a; public int b; public StructA() { } public StructA(Pointer p) { super(p); read(); } @Override protected List<String> getFieldOrder() { return Arrays.asList(new String[]{"a", "b"}); } public static class Reference extends StructA implements Structure.ByReference { } public static class Value extends StructA implements Structure.ByValue { } } 不是内联数组,因此我必须将struct B表示为as,那么如何将Java as转换为Pointer

1 个答案:

答案 0 :(得分:1)

您需要确保该字段具有指针类型。您可以使用Structure.ByReference(创建实现Structure.ByReference标记接口的结构类的子类)执行此操作,然后使用Structure.toArray()在该内存上覆盖连续的struct数组。

您也可以使用简单的Pointer,但是您需要手动读取/写入结构和相关对象,以及执行JNA通常为您执行的本机内存同步。

例如:

class StructA {
    public static class ByReference extends StructA implements Structure.ByReference { }
}
class StructB {
   public StructA.ByReference sa;
   public int size;
   public StructA[] getMembers() {
       return (StructA[])sa.toArray(this.size);
   }
}