将变量从C ++传递到Matlab(工作区)

时间:2015-07-30 02:14:39

标签: c++ matlab variables parameter-passing

我正在尝试将变量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,但这没有帮助。

我很感激你能给我的任何见解。谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码对我来说很好。 通过writng engClose(ep);你关闭了Matlab引擎,所以变量z将在Matlab会话中消失。

编辑:通过查看您的代码,我注意到z没有受到z_array的影响。所以请尝试以下代码

org.json.JSONObject json = new org.json.JSONObject();
json.put("header", "header");
json.put("array", out);