Tôi đang cố gắng gọi hàm C++ có trong tệp dll, hàm C++ lấy đối tượng cấu trúc làm tham số bằng tham chiếu và hàm sẽ gán giá trị trong hàm đó,JNA: mục đích của getFieldOrder() trong lớp cấu trúc
Vì vậy, trong ứng dụng java của tôi để vượt qua đối tượng cấu trúc cho một chức năng tôi đã viết như thế này:
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);
}
lớp học chính của tôi
public class Someclass
{
public static void main(String args[])
{
someinterface.strctclass.ByReference sss=new someinterface.strctclass.ByReference();
someinterface obj=someinterface.instance;
obj.somefunction(sss);
}
}
khi tôi đã cố gắng này, nó là cho tôi
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable
vì vậy tôi phải làm gì? Có vấn đề gì với hàm getFieldOrder()?
bất cứ ai có thể giải thích cho tôi chính xác JNA sẽ chuyển đổi đối tượng lớp trong java thành đối tượng cấu trúc trong C++ như thế nào?
thực sự ngoại lệ đang xảy ra khi gọi hàm nhưng tôi không hiểu tại sao nó lại xảy ra như vậy.
đó là cách duy nhất tôi biết làm thế nào cấu trúc của C++ được đại diện trong java sử dụng JNA và gửi đối tượng cấu trúc như tham số chức năng, như vậy là những gì chỉ arraylist tôi đang sử dụng trong mã của tôi là trong ** getfieldoreder() ** chức năng vì vậy nghĩ rằng thực hiện chức năng là vấn đề và yêu cầu làm rõ –
Tôi đã thử nó nhưng nó là cho tôi biên dịch lỗi thời gian nói Loại không khớp: không thể chuyển đổi từ ngắn thành Chuỗi ... dưới dạng biến số i của tôi s của loại ngắn nhưng chúng tôi đang gán nó vào mảng array.so i riêng biệt được giao mỗi biến như thể hiện trong mã trong bài. vì vậy nó không giải quyết được vấn đề của tôi. –
Vui lòng đọc phụ lục cho câu trả lời ở trên. – technomage