1

次の C 構造体定義があるとします。

struct StructA {
    int a;
    int b;
};

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

したがって、 のasフィールドは、 サイズ の のStructB配列を指します。次に、Java で次のクラスを表します。StructAcountstruct 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しかし、 Javaではどのように表現すればよいでしょうか。asはインライン配列ではないため、 として表現する必要がありasますPointer。JavaStructA[]を に変換するにはどうすればよいPointerですか?

4

1 に答える 1

1

フィールドにポインター型があることを確認する必要があります。これを行うには(タグ付けインターフェイスStructure.ByReferenceを実装する構造体クラスのサブクラスを作成します)、次に使用して、そのメモリ上に構造体の連続配列をオーバーレイします。Structure.ByReferenceStructure.toArray()

単純なPointer.

例えば:

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);
   }
}
于 2013-07-17T17:18:54.570 に答える