Код: Выделить всё
#[unsafe(no_mangle)]
pub extern "C" fn init() {
unsafe {
_init();
}
}
Код: Выделить всё
#[link(...)]
unsafe extern "C" {
pub fn _init();
}
< /code>
Эта функция реализована в C как таковой: < /p>
void _init() {
initscr();
cbreak();
keypad(stdscr, TRUE);
getch();
endwin();
}
< /code>
Эта библиотека ржавчины составлена как динамическая библиотека C (.so) < /p>
Мой код Java выглядит следующим образом: < /p>
public class Init {
public void init() throws RuntimeException {
Linker linker = Linker.nativeLinker();
try(Arena arena = Arena.ofConfined()) {
SymbolLookup lookup = SymbolLookup.libraryLookup(Path.of(...), arena);
Optional optionalInitAddress = lookup.find("init");
if(optionalInitAddress.isPresent()) {
MemorySegment initAddr = optionalInitAddress.get();
FunctionDescriptor initDesc = FunctionDescriptor.ofVoid();
MethodHandle init = linker.downcallHandle(initAddr, initDesc);
init.invoke();
} else {
throw new NoSuchElementException();
}
} catch(Throwable e) {
throw new RuntimeException(e);
}
}
}
При дальнейшем осмотре, getch и Cbrea 0.
Я не уверен, почему Java демонстрирует это странное поведение.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... n-java-ffm