问题描述:
项目中需要用JNA封装如下一个库函数:
int virConnectListHosts(virConnectPtr conn, virHostNameEntry **hostNameListPtr)
virHostNameEntry结构如下:
struct _virHostNameEntry {
char *hostName;
struct _virHostNameEntry *next;
};
typedef struct _virHostNameEntry virHostNameEntry;
Java封装类:
public class HostNameEntry extends Structure{
public String hostName;
public HostNameEntry.ByReference next = null;
public HostNameEntry(){
super();
}
public HostNameEntry(final Pointer p) {
super(p);
read();
}
public static class ByReference extends HostNameEntry implements Structure.ByReference {
public ByReference() {
}
public ByReference(HostNameEntry entry) {
super(entry.getPointer());
read();
// TODO Auto-generated constructor stub
}
}
public static class ByValue extends HostNameEntry implements Structure.ByValue {
public ByValue() {
}
public ByValue(HostNameEntry entry) {
super(entry.getPointer());
read();
// TODO Auto-generated constructor stub
}
}
}
Access 代码:
List<String> result = new ArrayList<String>();
PointerByReference hostNameListPtr = new PointerByReference();
libvirt.virConnectListHosts(VCP, hostNameListPtr);
processError();
Pointer headPtr = hostNameListPtr.getValue();
if(null != headPtr) {
for(HostNameEntry entry = new HostNameEntry(headPtr); null != entry; entry = entry.next) {
result.add(new String(entry.hostName));
}
}