相关疑难解决方法(0)

将Python列表传递给嵌入式Rust函数

我正在学习如何在Python中嵌入Rust函数,如果我的输入是ints而不是list ,一切正常.

如果我的lib.rs文件是:

#[no_mangle]
pub extern fn my_func(x: i32, y: i32) -> i32 {
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用如下:

In [1]: from ctypes import cdll

In [2]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")

In [3]: lib.my_func(5,6)
Out[3]: 11
Run Code Online (Sandbox Code Playgroud)

但是,如果我将我lib.rs改为:

#[no_mangle]
pub extern fn my_func(my_vec: Vec<i32>) -> i32 {
    let mut my_sum = 0;
    for i in my_vec {
        my_sum += i;
    }
    return my_sum;
}
Run Code Online (Sandbox Code Playgroud)

我不能再在Python中使用它(这编译得很好):

In [1]: from ctypes import cdll

In [2]: lib = …
Run Code Online (Sandbox Code Playgroud)

python ctypes rust

11
推荐指数
2
解决办法
787
查看次数

将C数组传递给Rust函数

我正在尝试制作一个Rust dylib,并使用其他语言,如C,Python等.我已成功调用了一个Rust函数和来自python的i32参数.现在我正在尝试创建一个函数,它接受一个数组(指向它的指针,或者将数据集传递给Rust lib所需的任何东西).

#![crate_type = "dylib"]
#[no_mangle]
pub extern fn rust_multiply(size: i32, arrayPointer: &i32) -> i32
{
    *(arrayPointer)
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作.但

#![crate_type = "dylib"]
#[no_mangle]
pub extern fn rust_multiply(size: i32, arrayPointer: &i32) -> i32
{
    *(arrayPointer + 1) // trying to get next element
}
Run Code Online (Sandbox Code Playgroud)

失败了

src/lib.rs:5:2: 6:2 error: type `i32` cannot be dereferenced
src/lib.rs:5    *(arrayPointer + 1)
src/lib.rs:6 }
Run Code Online (Sandbox Code Playgroud)

这个:

pub extern fn rust_multiply(size: i32, array: &[i32]) -> i32
Run Code Online (Sandbox Code Playgroud)

做一些像array[0]"length = 0"错误的失败.

c arrays rust

4
推荐指数
1
解决办法
3138
查看次数

标签 统计

rust ×2

arrays ×1

c ×1

ctypes ×1

python ×1