matlab引擎数据检索失败

时间:2014-07-10 18:07:25

标签: c++ matlab matlab-engine

我从matlab引擎读取数据时遇到问题。我可以在中创建一个变量 引擎,保存工作区,然后将其加载到matlab中,表明变量存在且具有正确的值 但是,无论实际值是多少,我检索的C ++值始终为零。指向我收到的变量(matM)的指针是一个有效的指针。如果'engGetVariable'命令失败,则根据Matlab文档,它应为NULL 然而,当变量的值应为5时,尝试使用matlab命令从该指针(mxGetData)中检索整数数据时产生零。另外,直接检查属于指针的值将产生零。

以下是代码:

int main()
{
Engine *ep;
mxArray *matM = NULL;

if (!(ep = engOpen("")))
{
  fprintf(stderr, "\nCan't start MATLAB engine\n");
  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.htmlhttp://www.mathworks.co.uk/help/matlab/apiref/enggetvariable.html?searchHighlight=engGetVariable) 导致变量读数失败。

1 个答案:

答案 0 :(得分:4)

mxGetData的返回值应投射到我想象的double*,然后您应该可以取消引用它以获得5.0。默认情况下,Matlab数字是双倍的,因此m = 5不会将int分配给m