现在我已经定义了一个c结构如下:
struct HostNameEntry {
char *hostName;
struct HostNameEntry *next;
};
我已经定义了一个方法如下:
listHosts(HostNameEntry ** hostNameListPtr)
上述方法会将HostNameEntry重新调回给调用者。
如何通过JNA映射此结构/方法?以及如何将hostName存储在HostNameEntry中?
非常感谢
答案 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());