我从 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)导致变量读取失败。