一、效果
先看效果,就是调用matlab简单的绘制了sin(x)
的图像
二、环境配置
这里使用的时matlab 的engine所以需要配置相关头文件和库文件。这些文件的位置在matlab安装目录下的include和lib中
-
在VS中指定头文件和静态库的目录路径
-
VS中指定依赖项的名字。这里就是静态库目录中的库名字
-
将一些动态库复制到项目的源代码下,否者会在运行时出现以下错误。缺少什么动态库文件 就在matlab安装目录中去寻找!
三、C++代码
- 然后就是编写C++源代码吗,代码如下:
#include <iostream>
#include <math.h>
#include <engine.h>
using namespace std;
void matlabcall() {
Engine* ep;
if (!(ep = engOpen(NULL)))
{
cout << "Sorry Matlab engine fail!" << endl;
}
else {
cout << "Matlab engine start ok" << endl;
}
engEvalString(ep,"figure(1)"); //向matlab发送字符串指令
engEvalString(ep, "x = linspace(0,2*pi)");
engEvalString(ep,"y=sin(x)");
engEvalString(ep, "plot(x,y)");
system("pause");
engClose(ep); // 关闭 Matlab 引擎
}
int main() {
matlabcall();
return 0;
}
四、执行效果
五、函数详情
matlab Eigen主要有以下一个函数提供给C++调用,就是创建ep后就能够调用以下函数。
/* Execute matlab statement */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engEvalString(Engine *ep, //执行matlab语句
const char *string);
/* Start matlab process for single use.
Not currently supported on UNIX. */
LIBMWENGINE_PUBLISHED_API_EXTERN_C Engine *engOpenSingleUse( //以独占方式启动Matlab进程,其他用户无法访问当前Matlab进程
const char *startcmd, void *reserved, int *retstatus);
/* SetVisible, do nothing since this function is only for NT */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engSetVisible(Engine *ep, bool newVal); //获取当前窗口状态,指示当前Matlab服务器窗口是否可见。True表示可见,False表示该窗口隐藏。该函数仅对Windows NT系统有效。
/* GetVisible, do nothing since this function is only for NT */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engGetVisible(Engine *ep, bool* bVal);
/* Start matlab process */
LIBMWENGINE_PUBLISHED_API_EXTERN_C Engine *engOpen(const char *startcmd); //打开Matlab服务进程
/* Close down matlab server */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engClose(Engine *ep); //关闭Matlab服务进程
/* Get a variable with the specified name from MATLAB's workspace */
LIBMWENGINE_PUBLISHED_API_EXTERN_C mxArray *engGetVariable( //从Matlab服务进程空间中获取指定名称的变量
Engine *ep, const char *name);
/* Put a variable into MATLAB's workspace with the specified name */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engPutVariable(Engine *ep, //将一个变量以指定名称放入Matlab服务进程空间。
const char *var_name, const mxArray *ap);
/* register a buffer to hold matlab text output */
LIBMWENGINE_PUBLISHED_API_EXTERN_C int engOutputBuffer(Engine *ep, //注册一个缓冲区以获取Matlab命令执行输出结果
char *buffer, int buflen);