Keine von diesen hat ein struct
Feld. Wenn man bedenkt, dass []
fester bindet (höhere Priorität) als *
, haben Sie jeweils ein Array von Pointer auf Short, einen Zeiger auf struct
(oder einen Zeiger auf ein zusammenhängendes Array von struct
, wahrscheinlicher) und ein Array von Zeiger auf struct
.
Die einfachste Zuordnung für einen Zeigertyp ist Pointer
. Sobald dies funktioniert, können Sie es zu einem spezifischeren Typ verfeinern.
struct*
sollte Structure.ByReference
als Feldtyp verwenden, und ein Array davon wäre Structure.ByReference[]
.
Wie in der JNA FAQ beschrieben (getFieldOrder()
und Konstrukteuren der Kürze halber weggelassen):
public class algorithm_list extends Structure {
public static class ByReference extends algorithm_list implements Structure.ByReference { }
public byte num_of_alg;
public Pointer[] algorithm_guid = new Pointer[1];
public algorithm_list(Pointer p) {
super(p);
int count = (int)readField("num_of_alg") & 0xFF;
algorithm_guid = new Pointer[count];
super.read();
}
public class key_data extends Structure {
public static class ByReference extends key_data implements Structure.ByReference { }
public Pointer key;
public short key_length;
public algorithm_list.ByReference algorithms;
public key_data(Pointer p) {
super(p);
super.read();
// NOTE: if algorithms points to a contiguous block of struct,
// you can use "algorithms.toArray(count)" to get that array
}
}
public class key_array {
public byte read_byte;
public byte number_of_keys;
public key_data.ByReference[] keys = new key_data.ByReference[1];
public key_array(Pointer p) {
super(p);
int count = (int)readField("number_of_keys") & 0xFF;
keys = new key_data.ByReference[count];
super.read();
}