6
我想調用一個dll文件中的C++函數,C++函數將結構對象作爲參數引用,並且函數將分配該函數中的值,JNA:結構類中的getFieldOrder()的目的
所以在我的Java應用程序,以結構對象傳遞給函數我沒這樣寫:
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);
}
我的主類
public class Someclass
{
public static void main(String args[])
{
someinterface.strctclass.ByReference sss=new someinterface.strctclass.ByReference();
someinterface obj=someinterface.instance;
obj.somefunction(sss);
}
}
時,我想這是給我
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable
那麼我該怎麼辦?在getFieldOrder()函數中有什麼問題嗎?
任何人都可以解釋我究竟如何將Java中的類對象轉換爲C++中的結構對象?
實際上在調用函數時發生異常,但我不明白爲什麼它發生這種情況。
這就是我知道C++的結構在Java中使用JNA代表和發送結構對象作爲函數參數的唯一途徑,所以是什麼解決這個異常?我在我的代碼中使用的唯一arraylist是在** getfieldoreder()**函數,所以認爲功能實現是問題,並要求澄清 –
我試過了,但它給我編譯時錯誤說Type不匹配:不能從short轉換爲String ... as my xxx變量i s的類型短,但我們將其分配給字符串array.so我分別分配每個變量,如後在代碼中所示。所以它不能解決我的問題。 –
請閱讀上述答案的附錄。 – technomage