gpt4 book ai didi

java - 指向结构体数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:55 25 4
gpt4 key购买 nike

假设我有以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com