Я пытаюсь использовать библиотеку C с GraalMV, и у меня есть следующая структура, которую я не могу объявить:
typedef int (*mon_handler)(void *);
typedef struct
{
mon_handler mon_cb;
} opts;
Мне нужно знать, с каким типом данных объявлять mon_handler
@CStruct(value = "opts")
interface Opts extends Pointerbase{
@CField("mon_handler")
???????? getMonHandler();
}
Заранее спасибо!!
После приведения типа указателя void это упрощается до
typedef int *mon_handler;
Где mon_handler
— указатель на int
. Это по существу эквивалентно
typedef (int *) mon_handler;
Таким образом, правильное отображение будет IntByReference
в JNA. CIntPointer
в GraalVM также соответствует этому типу:
A pointer to a 32-bit C primitive value.
Да, CIntPointer — это «указатель на 32-битное примитивное значение C». что именно это и есть.
Привет Даниил, спасибо за ответ. Знаете ли вы, может ли IntByReference быть эквивалентен CIntPointer из graalvm?