JNA:指向结构的指针

时间:2012-03-11 19:55:13

标签: pointers struct pass-by-reference jna jnaerator

我有一个函数调用:

long foo(mystruct **list)

mystruct的定义是

typedef struct {
    otherstruct *bar[64];
} mystruct;

我试图找到对应于bar的(JNA)Structure []。我当前的函数定义是int foo(PointerByReference list);,因为这是指向指针的指针,但我无法弄清楚如何获取Structure []。

在C中,代码使用如下:

mystruct *list;
foo(&list);
for (i=0; i<64; i++)
    doStuff(list->bar[i]);

1 个答案:

答案 0 :(得分:2)

  1. PointerByReference是合适的;使用getValue()获取Pointer 值。
  2. 使用该值,初始化您的“mystruct”结构
  3. 由于“otherstruct *bar[64]”表示struct*的数组,因此您需要显式使用类型Structure.ByReference[]的字段来强制JNA将数组视为指针而不是内联结构。 / LI>

    代码:

    class OtherStruct extends Structure {
        class ByReference extends OtherStruct implements Structure.ByReference { }
        ...
    }
    class MyStructure extends Structure {
        public OtherStruct.ByReference[] bar = new OtherStruct.ByReference[64];
    }
    

    JNA应该在必要时围绕本机函数调用隐式调用Structure.read()和Structure.write(),但除此之外,您可能需要根据您的使用情况明确地调用这些调用。