Matlab引擎数据检索失败

matlab engine data retrieval fails

本文关键字:失败 检索 数据 引擎 Matlab      更新时间:2023-10-16

我有一个问题从matlab引擎读取数据。我可以在
中创建一个变量引擎,并保存工作空间,随后将其加载到matlab中,显示变量存在并且具有正确的值。
然而,无论实际值是多少,我检索到的c++值总是零。我接收到的变量指针(matM)是一个有效的指针。如果'engGetVariable'命令失败,根据Matlab文档,它应该为NULL。
然而,尝试matlab命令从该指针(mxGetData)检索整数数据产生零,当变量的值应该是5。直接检查属于指针的值也会得到0。

代码如下:

int main()
{
Engine *ep;
mxArray *matM = NULL;
if (!(ep = engOpen("")))
{
  fprintf(stderr, "nCan't start MATLAB enginen");
  return EXIT_FAILURE;
}
engEvalString(ep, "m = 5");
engEvalString(ep, "save 'MatlabTestsResult.mat'");
matM = engGetVariable(ep,"m");
if (matM==NULL){cout << "pointer is null..." << endl;}
int* Cm = (int *)mxGetData(matM);
cout << *Cm << endl;
cout << "Pointer: " << matM << endl;
int tst = *((int*) matM);
cout << tst  << endl;

mxDestroyArray(matM);
engClose(ep);
return EXIT_SUCCESS;
}

和它创建的输出:

./MatlabTests  
0  
Pointer: 0x7f25559b7f90  
0  

我找不到我在做什么不同于matlab的例子(http://www.mathworks.co.uk/help/matlab/apiref/mxgetdata.html, http://www.mathworks.co.uk/help/matlab/apiref/enggetvariable.html?searchHighlight=engGetVariable)这会导致变量读出失败。

我想象mxGetData的返回值应该被转换为double*,然后您应该能够对其解引用以获得5.0。默认情况下,Matlab数字是双精度的,因此m = 5不给m分配int