1

我有一个函数调用:

long foo(mystruct **list)

其中的定义mystruct

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

我正在尝试获取与 bar 对应的 (JNA) Structure[]。我当前的函数定义是int foo(PointerByReference list);因为这就是指向指针的指针,但我不知道如何获取结构 []。

在 C 中,代码使用如下:

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

1 回答 1

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

代码:

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(),但除此之外,您可能需要根据您的使用情况显式地进行这些调用。

于 2012-03-13T18:50:34.530 回答