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

标签 java jna

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

相关文章:

java - 将非结构化数据处理成结构化数据以建立预测模型?

java - 为什么不是所有 `Executors` 工厂方法都包装在 `FinalizableDelegatedExecutorService` 中?

java - 如何检查 HashMap 中具有特定值的键数

java - 如何使用 JNA winreg 写入 Windows 注册表?

java - 将 DLL 包装成 Java

java - 将第三方 dll 链接到我的 dll

Java Selenium : open new tab

java - 如何更改下面的代码以避免意外的类型错误(必需 : variable; found: value)?

java - 最后错误异常 : [1413] Invalid index from JNA on 64Bit windows

java - Windows 中的 JNA 键盘钩子(Hook)