将变量从c++传递到Matlab(工作区)
Passing Variable from C++ to Matlab (Workspace)
我试图将变量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会话一起消失。
编辑:通过审查你的代码,我注意到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);
相关文章:
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 如何在工作区中使用 HTML/CSS UI 在C++中制作本机 UI 窗口
- xcb_get_image_reply另一个工作区/桌面上的窗口失败
- 程序在我的C++工作区中找不到头文件
- 如何将子窗口(MFC 应用程序)的工作区保存到图像
- Omnet++ 如何从同一工作区中不同项目中的 cSimpleModule 继承
- Qt Ros工作区中的QVTKWidget问题
- 从Windows注册表中保存的工作区检索窗口放置
- 在 ROS 工作区中使用 catkin_make 时 Qt 出现问题
- 在 win32 中调用WM_PAINT之间保留绘制的工作区
- Eclipse工作区磁盘的大小只会增长
- 可视化C++工作区和编译器.你好世界测试初学者
- 将C++项目导入Eclipse-重叠工作区
- 在C++应用程序中保存/加载工作区
- 日蚀。不同的工作区。无法保存相同的项目名称
- 如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 仿真过程后.cpp将变量从文件传输到 Matlab 工作区
- 将变量从c++传递到Matlab(工作区)