1.在vs2008中建立一个win32控制台应用程序,;
2.在vs2008中的 “工具”——>“选项”——>"项目与解决方案"——>"VC++目录"——>右上角选择"包含文件",在下面
包含:D:\Program Files\MATLAB\R2013a\extern\include
3.再选择“库文件”,在下面包含:D:\Program Files\MATLAB\R2013a\extern\lib\win32\microsoft ,然后按确定
4.选择左边新建的项目名,右击项目名,选择“属性”——>"配置属性"——>“链接器”——>"输入"——>"附加依赖项"中添加:
libmx.lib libmat.lib libeng.lib 各文件之间以空格隔开。
在网上找了个程序测试了一下:
#include <iostream>
#include <math.h>
#include "engine.h"
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libeng.lib")
using namespace std;
using namespace std;
int main()
{
const int N = 50;
double x[N],y[N];
int j = 1;
for (int i=0; i<N; i++) //计算数组x和y
{
x[i] = (i+1);
y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];
j*= -1;
}
Engine *ep; //定义Matlab引擎指针。
if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
cout <<"Can't start Matlab engine!" <<endl;
exit(1);
}
//定义mxArray,为行,N列的实数数组。
mxArray *xx = mxCreateDoubleMatrix(1,N, mxREAL);
mxArray *yy = mxCreateDoubleMatrix(1,N, mxREAL); //同上。
memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。
memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。
engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。
engPutVariable(ep, "yy",yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。
//向Matlab引擎发送画图命令。plot为Matlab的画图函数,参见Matlab相关文档。
engEvalString(ep, "plot(xx, yy); ");
mxDestroyArray(xx); //销毁mxArray数组xx和yy。
mxDestroyArray(yy);
cout <<"Press any key to exit!" <<endl;
cin.get();
engClose(ep); //关闭Matlab引擎。
}
*******在做完以上工作后,编译可以通过,但是要执行的话,还会报“计算机中丢失libmx.dll。”的错误。*******
原因:matlab2010a版本的环境变量出现了问题。libmx.dll是存在于D:/Program Files/MATLAB/R2010a/bin/win32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:/Program Files/MATLAB/R2010a/bin,故系统不会自动到其子文件中找dll,从而报错说找不到文件。
解决办法:由于旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。所以只要在系统变量中包含路径D:/Program Files/MATLAB/R2010a/bin/win32即可。
5.配置环境变量:右击桌面“计算机”——>"属性"——>"高级系统设置"——>“环境变量”——>系统变量中“path”中添加:D:\Program Files\MATLAB\R2013a\bin\win32。
进测试,成功调用了matlab