1

我从 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.html,http://www.mathworks.co.uk/help /matlab/apiref/enggetvariable.html?searchHighlight=engGetVariable)导致变量读取失败。

4

1 回答 1

4

from 的返回值mxGetData应该被转换为double*我想像的,然后你应该能够取消引用它来获取5.0。默认情况下,Matlab 数字是双精度数,因此m = 5不分配intm.

于 2014-07-11T11:49:59.467 回答