Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何正确地将nalgebra::Matrix转换为Eigen::MatrixXf?_C++_Rust_Eigen_Nalgebra - Fatal编程技术网

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