Sto cercando di chiamare la funzione C++ presente in un file dll, la funzione C++ accetta l'oggetto struttura come parametro per riferimento e la funzione assegnerà i valori in tale funzione,JNA: qual è lo scopo di getFieldOrder() nella classe di struttura
Così nel mio applicazione java per passare oggetto la struttura ad una funzione l'ho scritto in questo modo:
interface someinterface extends Library{
public static class strctclass extends Structure
{
public static class ByReference extends tTIDFUDeviceInfo implements Structure.ByReference {}
public short xxx=0;
public char yyy='0';
public boolean zzz=false
public String www=new String();
protected ArrayList getFieldOrder() {
// TODO Auto-generated method stub
ArrayList fields = new ArrayList();
fields.add(Arrays.asList(new short{xxx}));
fields.add(Arrays.asList(new char{yyy}));
fields.add(Arrays.asList(new boolean{zzz}));
fields.add(Arrays.asList(new String{www}));
return fields;
}
someinterface instance=(someinterface) Native.loadLibrary("mydll", someinterface.class);
int somefunction(strctclass.ByReference strobject);
}
mia classe principale
public class Someclass
{
public static void main(String args[])
{
someinterface.strctclass.ByReference sss=new someinterface.strctclass.ByReference();
someinterface obj=someinterface.instance;
obj.somefunction(sss);
}
}
quando ho provato questo è dandomi la funzione
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable
così che cosa devo fare? c'è qualche problema in getFieldOrder()?
qualcuno può spiegarmi come esattamente JNA convertirà l'oggetto di classe in Java per strutturare l'oggetto in C++?
in realtà si sta verificando un'eccezione nel chiamare la funzione, ma non capisco perché succede così.
che è l'unico modo che conosco struttura del C++ è rappresentata in Java utilizzando JNA e inviare quell'oggetto struttura come parametro di funzione, quindi qual è il soluzione a tale eccezione, l'unico arraylist che sto usando nel mio codice è in ** getfieldoreder() ** funzione quindi ho pensato che l'implementazione della funzione è il problema e ho chiesto chiarimenti –
L'ho provato ma mi sta dando errore di compilazione dicendo Tipo mancata corrispondenza: impossibile convertire da breve a stringa ... come la mia variabile xxx i s di tipo short ma lo stiamo assegnando alla stringa array.so ho assegnato separatamente ciascuna variabile come mostrato nel codice in post. quindi non risolve il mio problema. –
Si prega di leggere l'addendum alla risposta sopra. – technomage