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

标签 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 但它不存在。我在这里缺少什么吗? (我也试过在 engPutVariable 之后插入 engEvalString(ep, "global z; disp(z);"); 但这没有帮助。

如果您能提供给我任何见解,我将不胜感激。谢谢!

最佳答案

我觉得你的代码不错。 通过写 engClose(ep);您关闭 Matlab 引擎,这样变量 z 将随着 Matlab session 消失。

编辑:通过查看您的代码,我注意到 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/

相关文章:

c++ - 如何阻止从整数中删除多个?

C++:使用带尖括号的#include <>放置文件的位置

matlab - 将图像转换为极坐标的示例明确执行 - 需要一个光滑的矩阵方法

c++ - 这个局部变量是否隐藏/隐藏了另一个常态或 Visual Studio 中的错误?

c++ - 为什么我不能使用浮点值作为模板参数?

c++ - 如何为多种类型专门化模板类的非模板成员函数?

Python:像在 MATLAB 中一样附加一个数组

c - 如何从 GTK+2 C 代码调用 matlab/octave 函数

javascript - JS 中获取 HiddenField 的值并传入 var

C++ 将 const 分配给环境变量或默认值