我有一个函数调用:
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]);
答案 0 :(得分:2)
PointerByReference
是合适的;使用getValue()
获取Pointer
值。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(),但除此之外,您可能需要根据您的使用情况明确地调用这些调用。