Как описать и получить доступ к сложной вложенной структуре ржавчины и функции структуры через Java FFM API?JAVA

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

Сообщение Anonymous »

Я хочу проверить, используя JDK22+ доступа к коду Rust через Java FFM. Затем я искал онлайн, как [1] ​​[2] и экспериментировал некоторый код тестирования. Я могу успешно получить доступ к простой функции ржавчины через Java FFM API. Например, < /p>

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

// Rust
#[no_mangle]
pub extern "C" fn add_numbers(x: i32, y: i32) -> i32 {
x + y
}

// Jvm
MethodHandle addNumbers = {
Linker linker = Linker.nativeLinker();
SymbolLookup rustlib = SymbolLookup.libraryLookup(
"target/release/libmylib.so",
Arena.global()
);
return linker.downcallHandle(
rustlib.find("add_numbers").orElseThrow(),
FunctionDescriptor.of(
ValueLayout.JAVA_INT,
ValueLayout.JAVA_INT,
ValueLayout.JAVA_INT
)
);
}

Object result = addNumbers.invokeExact(10, 20)
System.out.println("Result:" + result)
< /code>
Тем не менее, у меня есть проблема, с которой мне нужно получить доступ к сложной хэшмапе структуры ржавчины, которая является псевдонимом для ржавчины std hashmap, где он, по очереди ссылается на хэш -хешмап, где он содержит Хэш -строитель и сырой стол, и так далее. Я попытался с кодом, как ниже, и с вопросом. PhantomData через Java FFM API?// Code attempted
StructLayout nonNull = MemoryLayout.structLayout(
ValueLayout.ADDRESS
.withTargetLayout(
MemoryLayout.sequenceLayout(0, ValueLayout.JAVA_BYTE)
)
.withName("pointer")
);
StructLayout rawTableInner = MemoryLayout.structLayout(
ValueLayout.JAVA_INT.withName("bucket_mask"),
nonNull.withName("ctrl"),
ValueLayout.JAVA_INT.withName("growth_left"),
ValueLayout.JAVA_INT.withName("items")
);
StructLayout rawTable = MemoryLayout.structLayout(
rawTableInner.withName("table"),
???, // how to describe alloc which is a generic type A here?
???  // how to describe PhantomData here?
)
edit Удалить другие вопросы и сосредоточиться на одном вопросе. Спасибо. < /P>
[1]. Java ffm, как связать объект Java с помощью c struct? < /P>
[2]. https://akilmohideen.github.io/java-rus ... 04-01.html

Подробнее здесь: https://stackoverflow.com/questions/794 ... s-function

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