来自指针的JNA Java结构

时间:2012-01-13 21:22:44

标签: 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);

1 个答案:

答案 0 :(得分:4)

至少,您必须将结构定义为与其本机对应的大小相同(您可以使用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头自动生成映射。