C++ 如何正确地将nalgebra::Matrix转换为Eigen::MatrixXf?
我有一个C++ 如何正确地将nalgebra::Matrix转换为Eigen::MatrixXf?,c++,rust,eigen,nalgebra,C++,Rust,Eigen,Nalgebra,我有一个DLL是用C++编写的,我需要从一个Rust程序调用一个名为print\u matrix(Eigen::MatrixXf*m)的函数 我创建了一个4x3 mactrix,这个函数将指针作为其输入参数 防锈代码: 使用nalgebra::Matrix; pub类型MatrixX=矩阵; pub fn main(){ 匹配调用_dynamic(){ 正常()=>println!(“正常功能”), Err(e)=>println!(“{:?}”,e), } } pub fn call_dyna
DLL
是用C++
编写的,我需要从一个Rust程序调用一个名为print\u matrix(Eigen::MatrixXf*m)
的函数
我创建了一个4x3 mactrix,这个函数将指针作为其输入参数
防锈代码:
使用nalgebra::Matrix;
pub类型MatrixX=矩阵;
pub fn main(){
匹配调用_dynamic(){
正常()=>println!(“正常功能”),
Err(e)=>println!(“{:?}”,e),
}
}
pub fn call_dynamic()->结果{
让lib=dll::Library::new(“MyDLL.dll”)?;
不安全{
让func:dll::Symbol=lib.get(b“打印矩阵”)?;
func(init_cube());
好(())
}
}
//初始化矩阵并返回原始指针
pub fn init_matrix()->*mut MatrixX{
let points:MatrixX=DMatrix::from_row_slice(
4.
3.
&[0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0],
);
框::进入_原始(框::新(点))
}
C++代码:
extern“C”declspec(dllexport)void print_矩阵(Eigen::MatrixXf*m);
无效打印矩阵(特征::矩阵xxf*m){
使用名称空间特征;
使用名称空间std;
//矩阵的打印大小
std::cout我没有发现nalgebra矩阵与特征矩阵兼容,并使用数组将数据传递给特征矩阵
C++代码:
//创建特征::矩阵
void*创建矩阵(大小行、大小列、整数点[]){
//初始化指针
本征::矩阵xxi*M;
M=新特征::矩阵XXi;
地图温度(点、行、列);
*M=温度;
返回M;
}
//打印矩阵
无效打印矩阵(特征::矩阵XXi*M){
您如何知道nalgebra
矩阵是“兼容的”(例如,在内存布局方面)到一个eigent
矩阵?这在任何地方都有记录吗?否则,我认为简单地在两个系统之间来回传递必然会产生奇怪的结果。@Phimueme是的,我找不到关于这个的任何信息,并使用数组将数据传递到一个eigen::矩阵。谢谢你的提示。
m->size() : 144
m->rows() : 12
m->cols() : 12
m->col(0) :
0
0
0
0
0
0
1
1
0
1
0
1