Tôi bắt đầu sử dụng JNA để giao tiếp với một thiết bị trên giao diện RS485 của máy tính. Ngạc nhiên với tôi, tôi đã có kết quả tốt rất nhanh. Nhưng bây giờ tôi bị mắc kẹt bởi một vấn đề đơn giản. Thư viện tôi sử dụng chấp nhận một con trỏ đến một con trỏ của struct. Chữ ký thực tế làJNA: Đặt con trỏ cấu trúc thành NULL
func(Struct1 **, Struct2 **, Struct3 *, Struct4 *, long)
Bây giờ để biết kích thước của các tham số đầu tiên thư viện hy vọng con trỏ cuối cùng trở thành một con trỏ NULL. Đây là những gì thất bại. Mã sau đây là những gì tôi đã cố gắng cho đến nay:
Struct1.ByReference[] s = (Struct1.ByReference[]) new Struct1.ByReference().toArray(size);
int pos = 0;
// ...
// for loop to set the s[pos] struture values
for(pos = 0; pos < size - 1; pos++)
// ...
// Now set the last array element to a null pointer to indicate end-of-list
s[pos].getPointer().setPointer(0, null);// Following does not work: results in zero memoried structure
s[pos] = null; // Following does not work wither: NullPointerException at com.sun.jna.Structure.autoWrite
EDIT 1
s[pos] = new Struct1.ByReference(Pointer.NULL); // results in zero memoried structure as well
EDIT 2
Theo câu hỏi của technomage. Nếu tôi viết mã C, nó có thể trông giống như thế:
Struct1 **s = malloc(n * sizeof(Struct1*));
for(int i=0; i<n; i++)
{
if(i == n -1)
{
s[i] = NULL;
}
else
{
s[i] = malloc(sizeof(Struct1));
s[i].bla = value;
....
}
}
Nhưng được cảnh báo: Tôi không giỏi về C/C++. Tôi coi Java là miền của tôi.
Có ai có vấn đề tương tự không? Có lẽ tôi chỉ không thấy gỗ cho cây cối ...
Xin cảm ơn trước.
Vui lòng bao gồm mẫu sử dụng gốc. Các khai báo hàm cho các biến thể con trỏ có thể không rõ ràng nếu không có ngữ cảnh đó - không có cách nào để phân biệt giữa một con trỏ với một mảng, một con trỏ tới một giá trị con trỏ đơn lẻ hoặc một vài biến thể khác. – technomage
Bạn có ý nghĩa gì với 'sử dụng ví dụ'? Thư viện được sử dụng từ mã của một thiết bị nhúng chạy FreeRTOS, một hệ điều hành thời gian thực nguồn mở. Tôi không có bất kỳ mã gốc nào ngoài tệp tiêu đề xuất các phương thức của thư viện. –
Nếu bạn đã viết mã trong 'C' để truy cập thư viện theo cách bạn muốn, điều gì sẽ _that_ trông như thế nào? – technomage