【问题标题】:How can I pass a FFI array as a c_void pointer to nalgebra's DMatrix2?如何将 FFI 数组作为 c_void 指针传递给 nalgebra 的 DMatrix2?
【发布时间】:2016-04-23 10:03:38
【问题描述】:

我在 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(),因此无法编译。

我怎样才能做到这一点?

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

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

【问题讨论】:

    标签: python c++ matrix rust ffi


    【解决方案1】:

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

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

    为确保指针类型匹配,您可以将参数列表中p_data 的类型更改为*const N,其中N 是您在矩阵中使用的类型,或者使用像@ 这样的转换987654326@.

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多