2013-07-17 205 views
0

的阵列考虑我有以下的C结构的定义:指针结构

struct StructA { 
    int a; 
    int b; 
}; 

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

所以,StructBas领域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 { } 
} 

不过,我将如何在Java中代表struct B?由于as不是内联阵列,因此我必须将as表示为Pointer,那么如何将Java StructA[]变成Pointer

+0

什么什么上有问题StructA []或ArrayList中或?它仍然是一个参考,您对阵列上的项目所做的任何更改都会传播到原始类。 – gcandal

+0

或者更好的是,只需用一个ArrayList替换StructB,后者将完成StructB的所有操作。 – kiheru

回答

0

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

您也可以使用简单的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); 
    } 
}