Domanda

Sono stato impegnato a creare un involucro attorno JNA x264.dll. Ho la seguente classe per il mio x264_param_t:

http://pastebin.com/Mh4JkVpP

Tuttavia, quando cerco di inizializzare il mio x264_param_t del genere

x264_param_t param_t = new x264_param_t;

ottengo il seguente errore:

Exception in thread "main" java.lang.IllegalArgumentException: Can't determine size of nested structure: Can't instantiate class anotherReversed.x264_param_t$Vui (java.lang.InstantiationException: anotherReversed.x264_param_t$Vui)
        at com.sun.jna.Structure.calculateSize(Structure.java:790)
        at com.sun.jna.Structure.allocateMemory(Structure.java:287)
        at com.sun.jna.Structure.<init>(Structure.java:177)
        at com.sun.jna.Structure.<init>(Structure.java:167)
        at com.sun.jna.Structure.<init>(Structure.java:163)
        at com.sun.jna.Structure.<init>(Structure.java:154)
        at anotherReversed.x264_param_t.<init>(x264_param_t.java:7)

Se io commento la Vui nella sua classe genitore costruttore, l'istanza è ok. Mi domando che è diverso esattamente questa struttura annidata, in quanto vi sono altri 2 (cioè Rc e analizzare) che sono nidificati nello stesso modo. In qualche modo, però, JNA non è in grado di trovare la dimensione necessaria per Vui. Tutti gli indicatori?

Modifica: Sembra che tutti gli altri le strutture nidificate (analizzare e rc) sono stati, inoltre, non inizializzati. Mi chiedo perché?

È stato utile?

Soluzione

Invece di commentare fuori Vui, sostituirlo con un puntatore e verificare se le altre due strutture sono riempiti.

Queste strutture sono definite come strutture interne all'interno del struct x264_param_t, forse JNA ha problemi con esso. Date un'occhiata più da vicino l'output di x264_param_t.toString (), come la stampa offset di memoria calcolati.

Spero che troverete le risposte migliori a JNA mailing list

Modifica Un hack sporco per risolvere il problema:. Utilizzare un array di int o semplicemente scaricare tutte le variabili dalla struct interna invece di utilizzare una classe separata

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top