matlab engine .lib,VC++调用MATLAB engine

实验环境:

MATLAB5.3, Visual C++ 6.0 SP3

1 生成几个连接库文件

在目录 c:\matlab\extern\include 下找这几个文件:

libeng.def libmx.def libmat.def

在DOS行命令下生成三个库文件:

c:\msdev\bin\lib /def:libmat.def /out:libmat.lib

c:\msdev\bin\lib /def:libeng.def /out:libeng.lib

c:\msdev\bin\lib /def:libmx.def /out:libmx.lib

把生成的三个LIB文件加入你的LINK项

libeng.lib libmx.lib libmat.lib

2 写包含engine功能的文件

可以参考:

c:\matlab\extern\examples\eng_mat\engwindemo.c

注意: 可以用.CPP做后缀。比如:MATLAB.CPP

3 设置编译选项

把MATLAB.C加入你的PROJECT

MATLAB.C的开头加入两行:

#INCLUDE "stdafx.h"

#INCLUDE "engine.h"

包含其它头文件, 自己看情况而定

4 编写调用engine的函数

比如响应菜单调用自己的函数matlabPlot,而此函数的实现在matlab.cpp文件中实现,内容如下:

#include "stdafx.h"

#include "engine.h"

intMatlabDraw()

{

Engine *ep;

if(!(ep = engOpen(NULL))) {

MessageBox ((HWND)NULL,"Can't start MATLAB engine","Matlab Draw",MB_OK);

return0;

}

engEvalString(ep, "x=0:0.01:2*pi;y=sin(x);plot(x,y);");

engEvalString(ep, "title('Matlab Drawing');");

engEvalString(ep, "xlabel('X');");

engEvalString(ep, "ylabel('Y');");

MessageBox(NULL, "Press any key …","MATLAB Draw",MB_OK);

engClose(ep);

return1;

}

5 设置其它编译连接选项

PreProcessor 加上: MATLAB_MEX_FILE

INCLUDE      加上: c:\matlab\extern\include

LIB          加上: c:\matlab\extern\include

最后,如果有必要的话,在DOS命令行运行: MATLAB /regserver

vc调用matlab引擎的一个简单例子

按如下步骤在vc中使用matlab引擎:

(1)。启动vc6。0,建立一个mfc(exe)类型工程matlabengine。

(2)。在项目建立后,设置环境。

Tool->options->Diretories 页面下Show directories for

先选择Include Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\INCLUDE

在选择Library Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\LIB\WIN32\MICROSOFT\MSVC60

(我的matlab根目录是 D:\PROGRAMS\MATLAB6P5P1\ ;这里的设置对不同工程只需要一次)

(3)。打开Project->Settings->Link页面,在Object/Library modules中加入libmatlb.lib libeng.lib libmx.lib。(这里对每个工程都要设置,并且根据需要选不同的库)

(4) 在工程目录的view的头文件中加入

#include "engine.h"

(5) 在about 对话框加入一个按钮,在其按钮响应函数如下:

voidCAboutDlg::OnButton1()

{

Engine *ep;

doublet[1];

t[0]=6.28;

mxArray *T=NULL;

if(!(ep=engOpen(NULL)))

{

AfxMessageBox("Can not open the matlab engine!");

exit(-1);

}

T=mxCreateDoubleMatrix(1,1,mxREAL);

memcpy((char*)mxGetPr(T),(char*)t,1*sizeof(double));

engPutVariable(ep,"T",T);

engEvalString(ep,"T1=0:pi/48:T;");

engEvalString(ep,"D=sin(T1)");

engEvalString(ep,"plot(T1,D,'r-');");

engEvalString(ep,"xlabel('t‘);");

engEvalString(ep,"ylabel('sin(t)');");

engEvalString(ep,"title('sin(x)的图像');");

mxDestroyArray(T);

}

(ilovejoy)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值