Например, библиотека SQLite содержит функцию для возврата номера версии библиотеки:
Код: Выделить всё
SQLITE_API const char *sqlite3_libversion(void);
Код: Выделить всё
final MemorySegment ms = this.symbolLookup.find("sqlite3_libversion")
.orElseThrow(() -> new RuntimeException("Could not find method 'sqlite3_libversion"));
final FunctionDescriptor fd = FunctionDescriptor.of(ValueLayout.ADDRESS);
final Linker linker = Linker.nativeLinker();
final MemorySegment result = (MemorySegment)linker.downcallHandle(ms, fd).invoke();
try (final Arena arena = Arena.ofConfined()){
final MemorySegment ptr = result.reinterpret(10, arena, null);
return ptr.getUtf8String(0);
}