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

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

Сообщение Anonymous »

Есть ли эффективный способ получить строку Java из внешней функции, которая возвращает указатель char в стиле C?
Например, библиотека SQLite содержит функцию для возврата номера версии библиотеки:

Код: Выделить всё

SQLITE_API const char *sqlite3_libversion(void);
Используя API внешних функций и памяти Java, я могу вызвать эту функцию следующим образом:

Код: Выделить всё

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);
}
Проблема в том, что я создал новый MemorySegment произвольного размера 10. Это нормально для этого примера, но как правильно получить строку из символа *, когда я понятия не имею о размере массива символов?>

Вернуться в «JAVA»