我正在尝试将变量z = 100
从C ++传递给Matlab进行进一步处理(这只是一个非常简化的示例)。我基本上希望将此作为全局变量传递,这样我就可以从任何Matlab函数(可能发送到Matlab工作区)中访问此变量。
这是我的C ++代码(我在C ++中使用Matlab引擎):
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
#include <iostream>
#include <math.h>
#include <fstream>
#include <stdio.h>
#include <Windows.h>
#include "engine.h"
#include <engine.h>
//#include <cmath>
#define _USE_MATH_DEFINES
#pragma comment ( lib, "libmat.lib" )
#pragma comment ( lib, "libmx.lib" )
#pragma comment ( lib, "libmex.lib" )
#pragma comment ( lib, "libeng.lib" )
using namespace cv;
using namespace std;
int main (int argc, char* argv[])
{
Engine *ep = engOpen(NULL);
int z;
mxArray *z_array = mxCreateDoubleMatrix(1,1,mxREAL);
double *pz = mxGetPr(z_array);
z = 100;
engPutVariable(ep, "z", z_array);
engClose(ep);
return 0;
}
该代码执行完后,我打开Matlab并尝试访问变量
z
,但该变量不存在。我在这里想念什么吗? (我也尝试在engEvalString(ep, "global z; disp(z);");
之后插入engPutVariable
,但这无济于事。如果您能给我任何见解,我将不胜感激。谢谢!
最佳答案
您的代码对我来说看起来不错。
通过写engClose(ep);您关闭Matlab引擎,以便变量z在Matlab会话中消失。
编辑:通过检查您的代码,我注意到z尚未受到z_array的影响。所以尝试下面的代码
mxArray *z_array = NULL;
double z[1] = {100};
z_array = mxCreateDoubleMatrix(1, 1, mxREAL);
memcpy((char *) mxGetPr(z_array), (char*) z, sizeof(double));
engPutVariable(ep, "z", z_array);
mxDestroyArray(z_array);
关于c++ - 将变量从C++传递到Matlab(工作区),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31714139/