1

现在我已经定义了 ac 结构如下:

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

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

listHosts(HostNameEntry **hostNameListPtr)

上述方法将返回一个 HostNameEntry 给调用者。

如何通过 JNA 映射此结构/方法?以及如何获取存储在 HostNameEntry 中的主机名?

非常感谢

4

1 回答 1

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());
于 2012-08-27T15:29:49.853 回答