我在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()
。
我该怎么做?
矩阵是一个双精度数组,但我试图保持接口通用,所以我也可以调用这些函数。蟒。
我不想在从函数返回时释放矩阵(我想借用,而不是拥有矩阵)。
答案 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
的演员。