zugeordnet werden kann Ich habe eine Struktur, die ein Array von anderen Struktur-Zeigern enthält, zusammen mit einem Feld für die Array-Länge. Diese Struktur wird über einen "out" -Parameter durch eine native Methode zurückgegeben.Wie Arrays variabler Länge in einer strukturierten Rückkehr von einer nativen Methode mit JNA
Die ursprüngliche "C" -Struktur:
typedef struct MMAL_COMPONENT_T
{
uint32_t input_num; /**< Number of input ports */
MMAL_PORT_T **input; /**< Array of input ports */
} MMAL_COMPONENT_T;
Die entsprechende Java-Klasse, die durch JNAerator:
public class MMAL_COMPONENT_T extends Structure {
public int input_num;
public MMAL_PORT_T.ByReference[] input;
}
Die "C" Methodensignatur:
MMAL_STATUS_T mmal_component_create(const char *name, MMAL_COMPONENT_T **component);
Java Nutzung:
PointerByReference ref = new PointerByReference();
status = mmal.mmal_component_create("<component-name>", ref);
MMAL_COMPONENT_T component = new MMAL_COMPONENT_T(ref.getValue());
Das generiert eine JNA-Fehlermeldung, die besagt, dass "Array Felder initialisiert werden müssen".
Derzeit bin ich mit Pointer
anstelle der Anordnung und den Aufbau von Hand das Array von ihm:
public class MMAL_COMPONENT_T extends Structure {
public int input_num;
public Pointer input;
}
Mit Nutzung:
Pointer[] array = component.input.getPointerArray(0, component.input_num);
MMAL_PORT_T port = new MMAL_PORT_T(array[0]);
port.read();
Aber dieser Ansatz scheint unbefriedigend wegen seiner Ausführlichkeit und weil Zeiger wird anstelle des eigentlichen Strukturtyps verwendet.
Also, was ist der kanonische Weg, dies mit JNA zu behandeln?