使用VC调用matlab engine编程
首先要在电脑中装VC和MATLAB,我的电脑装的是VC6.0和MATLAB7.1.
Matlab Engine 采用Client/Server的方式,通过ActivcX通道和Matlab接口来实现在VC编程环境中直接调用matlab中的指令。调用使用的函数是:engEvalSting。后面将讲到此函数的使用方法。
下面是完整的步骤。如果是第一次使用,则要设置一下VC的编程环境中的include和lib的路径指向。假设matlab安装在c盘默认目录,则如下设置:
·
·
注意:上面添加路径的两步只设置一次就可以了。下面来进行VC编程。
首先,运行VC向导,新建一个工程文件如下:
接下来选择一个对话框程序作为简单示例:
点击”Finish”可以完成自动生成一个工程框架。
下面来设计界面,我们来简单的添加一个按钮并为其添加响应函数:
生成的按钮响应函数:
void CVc_matlab_engineDlg::OnButton1()
{
}
好了至此VC部分框架已经搭好。下面来进入调用engine部分。
在编写函数调用engine之前,首先要设置一下链接库(每个工程都要设置一次的,而前面的路径设置不必)。
在Object/Library modules文本框中添加:
libmx.lib libmat.lib libeng.lib
接下来,在StdAfx.h 文件头中加入:
#include "engine.h"
并在按钮响应函数中输入:
void CVc_matlab_engineDlg::OnButton1()
{
Engine *ep;
if(!(ep=engOpen(NULL)))
::MessageBox(NULL,"Can' start the MATLAB engine","VC调用matlab engine示例程序",MB_OK);
engEvalString(ep,"x=0:0.05:2*pi;y=sin(x);");
engEvalString(ep,"plot(x,y);");
engEvalString(ep,"title('画正弦线');");
::MessageBox(NULL,"任意键继续","VC调用matlab engine示例程序",MB_OK);
engClose(ep);
}
到此,这个程序已经可以运行了! 程序执行界面:
点击按钮后调用matlab生成的正弦线:
可以看出关键的语句就是:engEvalString。其用法也很简单。
下表列出了几个常用的Matlab引擎的C语言调用函数:
函数名 | 功能 |
engOpen | 打开Matlab引擎 |
engEvaString | 在Matlab引擎中执行输入的Matlab命令 |
engPutArray | 将数据存入Matlab引擎 |
engGetArray | 从Matlab引擎中取出数据 |
engClose | 关闭Matlab 引擎 |
engSetVisible | 控制Matlab窗口的隐显 |
mxDestroyArray | 从内存中删除一个Matlab数组 |
mxGetM | 获得矩阵的行数 |
mxGetN | 获得矩阵的列数 |
mxGetPr | 获得矩阵变量的指针 |
mxCreateDoubleMatrix | 创建一个double型矩阵 |