by Guest » 24 Feb 2025, 05:01
Ich möchte über Java FFM mit JDK22+ Zugriff auf Rustcode testen. Dann suchte ich online wie [1] [2] und experimentierte einen Testcode. Ich kann über Java FFM -APIs erfolgreich auf eine einfache Rostfunktion zugreifen. Zum Beispiel < /p>
Code: Select all
// 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>
Ich habe jedoch ein Problem, mit dem ich auf eine komplizierte Rost -Struktur -Hashmap zugreifen muss, bei der es sich Hash Builder und Rohtisch und so weiter. Ich habe mit dem Code wie unten versucht, und eine Frage. Phantomdata durch Java ffm apis?// 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?
)
Bearbeiten Entfernen Sie andere Fragen und konzentrieren Sie sich auf eine Frage. Danke. < /P>
[1]. Java ffm, wie kann man ein Java -Objekt mit einer C -Struktur verknüpfen? < /P>
[2].
https://akilmohideen.github.io/java-rus ... 04-01.html
[url=viewtopic.php?t=14917]Ich möchte[/url] über Java FFM mit JDK22+ Zugriff auf Rustcode testen. Dann suchte ich online wie [1] [2] und experimentierte einen Testcode. Ich kann über Java FFM -APIs erfolgreich auf eine einfache Rostfunktion zugreifen. Zum Beispiel < /p>
[code]// 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>
Ich habe jedoch ein Problem, mit dem ich auf eine komplizierte Rost -Struktur -Hashmap zugreifen muss, bei der es sich Hash Builder und Rohtisch und so weiter. Ich habe mit dem Code wie unten versucht, und eine Frage. Phantomdata durch Java ffm apis?// 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?
)
[/code]
[b] Bearbeiten [/b] Entfernen Sie andere Fragen und konzentrieren Sie sich auf eine Frage. Danke. < /P>
[1]. Java ffm, wie kann man ein Java -Objekt mit einer C -Struktur verknüpfen? < /P>
[2]. https://akilmohideen.github.io/java-rust-bindings-manual/cha04-01.html