2009-01-30 27 views
6

Làm thế nào để ánh xạ hàm dưới đây cho java?
JNA Struct and Pointer mapping

VOID WriteToStruct (BOOL * Status, STRUCT_MSG RecBuff)

gì chức năng này thực hiện:
1) populates struct RecBuff tình trạng
2) Cập nhật

Làm thế nào để ánh xạ một con trỏ boolean trong Java và truy cập dữ liệu struct được cập nhật bởi hàm này?

Trả lời

7

Tôi đang tìm kiếm một vấn đề khác liên quan đến JNA và cấu trúc, và Google đã chuyển hướng tôi đến đây. Tôi hi vọng cái này giúp được.

Từ JNA API

Để vượt qua một cấu trúc theo giá trị, đầu tiên xác định cấu trúc, sau đó xác định một lớp rỗng từ đó mà thực hiện Structure.ByValue. Sử dụng lớp ByValue làm đối số hoặc kiểu trả về.

// Original C code 
typedef struct _Point { 
    int x, y; 
} Point; 

Point translate(Point pt, int dx, int dy); 

// Equivalent JNA mapping 
class Point extends Structure { 
    public static class ByValue extends Point implements Structure.ByValue { } 
    public int x, y; 
} 
Point.ByValue translate(Point.ByValue pt, int x, int y); 
... 
Point.ByValue pt = new Point.ByValue(); 
Point result = translate(pt, 100, 100); 
1

Bạn có thể sử dụng lớp ByReference để vượt qua các giá trị bằng cách tham khảo. Giả sử BOOL là một int bạn có thể sử dụng IntegerByReference.