如何将 FFI 数组作为 c_void 指针传递到代数的 DMatrix2?
How can I pass a FFI array as a c_void pointer to nalgebra's DMatrix2?
我有一个数组形式的矩阵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 调用函数。
我不想在从函数返回时释放矩阵(我想借用,而不是拥有矩阵)。
您可以使用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
这样的强制转换。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 如何将 FFI 数组作为 c_void 指针传递到代数的 DMatrix2?