java - 来自指针的 JNA Java 结构

标签 java c struct jna

我有一个结构,它不像原来的 C 结构那样完整描述。

    public class DISPLAY_DEVICE extends Structure {
        public char DeviceName[] = new char[32];
        public int StateFlags;
    }

而它实际上需要更多的变量。然而,我需要很长时间才能将它们全部移植过来。 现在我创建结构并将指针传递给 dll 函数,并尝试使用 device.read();重新获得变量。但是,变量返回空。所以我的问题是,我需要填写整个结构吗?还是有其他问题?

    DISPLAY_DEVICE displayDevice = new DISPLAY_DEVICE();
    int i = 0;
    while((CLibrary.INSTANCE.EnumDisplayDevicesA(Pointer.NULL, i, displayDevice.getPointer(), 0))) {
        System.out.println("screen" + i);
        displayDevice.read();
        System.out.println(displayDevice.StateFlags);
        System.out.println(displayDevice.DeviceName);

最佳答案

至少,您必须将结构定义为与其原生对应物相同的大小(对于您不关心的内容,您可以使用 byte[] 字段填充它)。

例如:

public class MyStruct extends Structure {
   public char[] DeviceName = new char[32];
   public char StateFlags;
   public byte[] dontcare = new char[128];
}

如果定义在 JNA 的 platform.jar 中不可用,您还可以使用 JNAerator 从 C header 自动生成映射。

关于java - 来自指针的 JNA Java 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857423/

相关文章:

syntax - ColdFusion 是否有用于创建结构的简短语法?

java - Evernote Java SDK NoteStoreClient.findNotes() 找不到笔记

java - 如何最好地输出大型单行 XML 文件(使用 Java/Eclipse)?

何时以及何时不在 C 中进行类型转换存在冲突?

c++ - 定位/下载头文件 R.h 和 Rmath 用于 C 与 R 接口(interface)

c - C中结构中的多个灵活数组?

java - 如何分配多维输出缓冲区来提供 Android Tflite 的 interpreter.run()?

java - 为什么这个同步方法没有按预期工作?

c - malloc 和 calloc 分配的内存块布局的区别?

c - 如何在 C 中使用带有嵌套结构的指定 init ?