は、私は、次の錆ライブラリがあるとします。CからVecを取ってRust関数を呼び出すことはできますか?
// lib.rs
#![crate_type = staticlib]
#[no_mangle]
pub extern fn do_something(number: i32) {
// something
}
#[no_mangle]
pub extern fn do_something_else(collection: &Vec<i32>) {
// something
}
私はCからdo_something
を呼び出すために、ということを知って、私はちょうどint32_t
を取っextern
関数を宣言する必要があるだろうが、それはdo_something_else
を呼び出すことが可能ですか?もしそうなら、どうですか?
私はCからの錆関数に整数配列ポインタを渡すことができると思います。操作のためにベクトルスライスを使用することができます。 – noshusan
@noshusanあなたは 'pub extern fn do_thing(slice:&[i32])'のようなことをして、 'void do_thing(int32_t slice [])'のようにC側で宣言しますか? –
私はよく分かりませんが、 'pub extern fn do_thing(slice:* [i32])'のように 'void do_thing(int32_t * slice [])'のようにc側で宣言することができます。ここでは、raw_pointerを使用しているため、安全でないブロックを宣言する必要があります。 – noshusan