假设我有以下 C 结构体定义:
struct StructA {
int a;
int b;
};
struct StructB {
struct A *as;
int count;
};
所以,as
StructB
领域指向 StructA
的数组尺寸 count
。那么,我代表struct StructA
在 Java 中使用以下类:
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
,那么我如何将 Java StructA[]
进入Pointer
?
最佳答案
您需要确保该字段具有指针类型。您可以使用 Structure.ByReference
(创建实现 Structure.ByReference
标记接口(interface)的结构体类的子类)来执行此操作,然后使用 Structure.toArray()
在该内存上覆盖连续的结构体数组。
您也可以只使用一个简单的指针
,但随后您需要手动读取/写入结构和相关对象,以及执行 JNA 通常为您执行的 native 内存同步。
例如:
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);
}
}
关于java - 指向结构体数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700798/