Matlab引擎数据检索失败
matlab engine data retrieval fails
我有一个问题从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
。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 使用VerQueryValue检索应用程序的文件描述
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 设置文件属性成功,但检索其失败
- C++使用libssh-libary通过SSH检索数据失败
- 检索静态char*数组失败
- 使用GetOpenFileName检索xml文件名后,tinyxml加载失败
- c++ regex_search捕获检索在运行时失败
- Matlab引擎数据检索失败
- 从QCombobox检索值失败-将QVariant强制转换为常量指针