2016-04-23 8 views
0

私はC++で配列の形をしており、それをRustで書かれた共有ライブラリ関数に渡したいと思います。私はfrom_row_vector()c_voidを渡すので、これはコンパイルされません何か nalgebraのDMatrix2へのc_voidポインタとしてFFI配列を渡すにはどうすればよいですか?

このような
#![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 
} 

を持っています。

どうすればこのようにすることができますか?

マトリックスは2倍の配列ですが、インターフェースを汎用的に保つようにしています。 Python。

私は関数から返ってくるときに行列を解放したくありません(私は借用したい、行列を所有しない)。

答えて

1

あなたは、スライスを得るためにstd::slice::from_raw_partsを使用することができます。

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

ポインタ型が一致、あなたはNタイプあなたです*const Nに引数リストにp_dataのタイプを変更するか、ということを確認するためにマトリックスで使用するか、p_data as *const Nのようなキャストを使用してください。

関連する問題