JNA Struct и Pointer mapping - PullRequest
       24

JNA Struct и Pointer mapping

6 голосов
/ 30 января 2009

Как можно сопоставить приведенную ниже функцию с java?

VOID WriteToStruct (BOOL * Status, STRUCT_MSG RecBuff)

Что делает эта функция:
1) Заполняет структуру RecBuff
2) Обновляет статус

Как мне сопоставить логический указатель в Java и получить доступ к данным структуры, обновляемым функцией?

Ответы [ 2 ]

7 голосов
/ 11 февраля 2009

Я искал другую проблему, касающуюся JNA и структур, и Google перенаправил меня сюда. Надеюсь, это поможет.

С JNA API

Чтобы передать структуру по значению, сначала определить структуру, а затем определить пустой класс от того, который реализует Structure.ByValue. Используйте ByValue класс в качестве аргумента или возвращаемого типа.

// 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 голос
/ 15 июня 2009

Вы можете использовать класс ByReference для передачи значений по ссылке. Предполагая, что BOOL - это int, вы можете использовать IntegerByReference.

...