正文

vc中如何调用matlab2008-06-06 21:29:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/vfdff/35969.html

分享到:

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 对话框加入一个按钮,在其按钮响应函数如下:
void CAboutDlg::OnButton1()
{
Engine *ep;
double t[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);

} 、

---------------------------------------------------------------------

实现VC、MATLAB通信方法简介(从东南大学机械工程系 陈永洲写的文章摘出)
MATLAB提供了许多方法与VC程序的通信:MATLAB引擎(ENGINE)模式,采用了客户机/服务器(CLIENT/SERVER)的计算形式,通过MATLAB应用程序接口(API)中有关函数,在VC环境中调用MATLAB函数,但此种方法需要MATLAB环境后台支持,因此系统必须安装MATLAB;MATLAB本身提供的MCC工具编译,编译m文件生成VC++或c语言,直接在VC中使用;MATLAB的MEX工具将m文件编译成DLL,供VC调用。。。。。。
MATLAB现具有的MATLAB Add—in(其包装了MCC、MEX)更方便了第二、三种方法的应用,现本系统的实现就是以第三种为基础的。
2.1 MATLAB与VC实现互连
为了在开发时实现对MATLAB的具体功能的调用,应首先在操作系统中安装MATLAB工具软件,之后并运行此工具软件,依次执行“mex –setup;mbuild –setup;cd(prefdir); mccsavepath;”命令。之后运行VC开发工具,从VC++菜单中依次打开“Tools->Customize->Add-ins and Macro Files”,选中MATLAB Add—in宏,可以看到工具栏中多了一个
。现在VC就可以利用它来得到m文件所对应的c、c++文件。
2.2 开发工具VC运行环境设置
开发时,须对VC的开发环境变量进行设置。通过“Tools->Options->Directories”找到的“Directories”项中添加环境变量。
添加头文件和库文件搜索路径有(本计算机的文件搜索路径为):
F:\MATLAB6P5\EXTERN\INCLUDE
F:\MATLAB6P5\EXTERN\INCLUDE\CPP
同时将MATLAB的链接库添加到VC中。从“Tools->Options->Directories”中“Show directories for:”下拉框里选择“Library files”,然后再在“Directories”项中添加环境变量。
F:\MATLAB6P5\EXTERN\LIB
F:\MATLAB6P5\EXTERN\LIB\WIN32
F:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
上述为VC编译MATLAB的m文件生成C代码的环境。同时为了编译JNI的h文件,还须通过菜单Tools.和Project添加如下头文件和库文件搜索路径:
D:\JBUILDER6\JDK1.3.1\INCLUDE
D:\JBUILDER6\JDK1.3.1\INCLUDE\WIN32
2.4 VC生成DLL
本系统首先用VC建立“MATLAB Project Wizard”项中名称为showpicture的Project,其中Project的选项结果如下图2所示:

图2 创建工程选项结果
将1.2中生成的mass_ MASSFrame.h文件拷贝到系统目录下,并添加到VC的“FileView”中“HeadFiles”里面。
在VC中为了对JAVA程序提供可调用的函数,须在“showpicture.c”文件中添加:
#include " mass_ MASSFrame.h"
//dll导出的JAVA调用函数的具体实现部分
JNIEXPORT void JNICALL
Java_mass_MASSFrame_showPicture
(JNIEnv *en, jobject ob)

{
showpictureInitialize();//初始化
mlfErrorpicture();//图像显示
mlfHGWaitForFiguresToDie();//关闭显示相关资源
}

“F7”编译程序,于是便得到“showpicture.dll”。
2.3 脱离MATLAB环境运行的支持文件
为了在没有安装MATLAB应用软件的环境下,能够使用其功能的DLL,须在运行此DLL的目录中添加一些文件,而这些文件可以通过工具栏中的“MATLAB Add-in Packager”获得。按照此工具默认的配置运行,得到一个zip压缩文件,使用时,将其解压到DLL文件所在的目录中,DLL就能脱离MATLAB环境使用。

阅读(9628) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册