如何通过JNA将指针指针映射到结构?

时间:2012-08-20 14:57:55

标签: jna

现在我已经定义了一个c结构如下:

struct HostNameEntry {
    char *hostName;
    struct HostNameEntry *next;
};

我已经定义了一个方法如下:

listHosts(HostNameEntry ** hostNameListPtr)

上述方法会将HostNameEntry重新调回给调用者。

如何通过JNA映射此结构/方法?以及如何将hostName存储在HostNameEntry中?

非常感谢

1 个答案:

答案 0 :(得分:2)

使用Structure.ByReference标记HostNameEntry类的版本以强制该字段采用指针值(而不是内联)。

public class HostNameEntry extends Structure {
   public static class ByReference extends HostNameEntry implements Structure.ByReference { }

   public String hostName;
   public HostNameEntry.ByReference next;

   public HostNameEntry() { }
   public HostNameEntry(Pointer p) { super(p); read(); }
}

public interface MyInterface extends Library {
    MyInterface INSTANCE = ...;
    void listHosts(PointerByReference pr);
}

// actual usage
PointerByReference pref = new PointerByReference();
MyInterface.INSTANCE.listHosts(pref);
HostNameEntry first = new HostNameEntry(pref.getValue());