如何将FFI数组作为c_void指针传递给nalgebra的DMatrix2?

时间:2016-04-23 10:03:38

标签: python c++ matrix rust ffi

我在C ++中有一个数组形式的矩阵,并希望将它传递给用Rust编写的共享库函数。我有类似的东西

#![crate_type = "dylib"]

extern crate libc;
use libc::c_void;

extern crate nalgebra as na;
use na::DMatrix2;

#[no_mangle]
pub extern "C" fn rust_fn(p_data: *const c_void, sizex: usize, sizey: usize) {
    let matrix = DMatrix2::from_row_vector(sizey, sizex, p_data);
    // Do something usefull with the matrix
}

由于我将c_void传递给from_row_vector()

,因此无法编译

我该怎么做?

矩阵是一个双精度数组,但我试图保持接口通用,所以我也可以调用这些函数。蟒。

我不想在从函数返回时释放矩阵(我想借用,而不是拥有矩阵)。

1 个答案:

答案 0 :(得分:1)

您可以使用std::slice::from_raw_parts获取切片:

let slice = std::slice::from_raw_parts(p_data, sizex*sizey);

要确保指针类型匹配,您可以将参数列表中的p_data类型更改为*const N,其中N是您在矩阵中使用的类型,或使用类似p_data as *const N的演员。