1

これで、ac 構造を次のように定義しました。

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

そして、次のようにメソッドを定義しました。

listHosts(HostNameEntry **hostNameListPtr)

上記のメソッドは、呼び出し元に HostNameEntry を返します。

この構造/メソッドをJNAでマッピングする方法は? また、HostNameEntry に格納されているホスト名を取得する方法は?

どうもありがとう

4

1 に答える 1

2

HostNameEntry クラスのバージョンに Structure.ByReference のタグを付けて、フィールドが (インライン化されるのではなく) ポインター値を取るように強制します。

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 に答える