win7_32位系统下,VS2008与MATLAB R2010b的混合编程(绘图)
来源:互联网 发布:淘宝链接机器人 编辑:程序博客网 时间:2024/06/02 03:48
版权声明:
1、这篇教程参考如下:
参考1:matlab封装DLL动态链接库 再用VS2010调用(matlab VS混合编程)(转载)
参考2:matlab 2010b与VS2008 混合编程的实现
参考3:[原]Matlab代码转C++(二) —— mwArray
2、本着尊重原创,大家转载的时候请注明出处,此教程编写不易啊~~
下面开始介绍:win7_32位系统下,VS2008与MATLAB R2010b的混合编程(绘图)
一、运行环境
1、win7_32位系统;
2、Microsoft Visual Studio 2008;(安装路径:C:\Program Files\Microsoft Visual Studio 9.0)
3、MATLAB R2010b。(安装路径:C:\Program Files\MATLAB\R2010b)
【注意】本文涉及的方法,可能对于高版本的Microsoft Visual Studio或者MATLAB不适用,也可能对于64位系统不适用。另外,建议将Microsoft Visual Studio 2008安装在上述路径中。有位网友说过:“新版本的VS+新版本的MATLAB+64位操作系统=无尽的烦恼”,我本人也深有体会。烦恼只要体现在:1)下文涉及到的一个命令“mbuild -setup”无法使用;2)配置流程繁琐易出错。上述的1~3的组合我是最满意的,配置起来也最简单,不需要添加什么环境变量之类的。嘿嘿,感觉自己好懒,见笑了~
二、任务要求
创建一个基于对话框的MFC程序,实现下图功能。当输入“X、Y、Z向量元素个数”并且按下“计算X、Y、Z数据并且绘图”按钮时,可以实现画图功能,图形界面与MATLAB相同,但是可以脱离MATLAB运行(即:MATLAB关闭时,按下按钮后依旧可以绘图)。X、Y、Z中数据满足如下关系式:
X[i-1]=(double)(i);
Y[i-1]=(double)(i+1);
Z[i-1]=(double)(i+2)。
i 是整数,从1到你所输入的“X、Y、Z向量元素个数”。
三、具体过程
1、
打开MATLAB,创建一个名为“drawwithdata.m”的函数文件,其中的代码为:
function drawwithdata(X,Y,Z)plot3(X,Y,Z,'.')end
保存之。【注意】最好有个end与function对应。
2、
在MATLAB命令窗口输入代码:
mbuild -setup %“-”之前有空格,请注意!然后出现:
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n?
选择: y ,键入y后出现:
Select a compiler:
[1] Lcc-win32 C 2.4.1 in E:\MATLAB\R2010b\sys\lcc
[2] Microsoft Visual C++ 2008 SP1 in C:\Program Files\Microsoft Visual Studio 9.0
[0] None
即提示我们选择 编译器,2,键入 2 后
Please verify your choices:
Compiler: Microsoft Visual C++ 2008 SP1
Location: C:\Program Files\Microsoft Visual Studio 9.0
Are these correct [y]/n?
选择: y ,键入y后出现:
****************************************************************************
Warning: Applications/components generated using Microsoft Visual Studio
2008 require that the Microsoft Visual Studio 2008 run-time
libraries be available on the computer used for deployment.
To redistribute your applications/components, be sure that the
deployment machine has these run-time libraries.
****************************************************************************
Trying to update options file: C:\Users\WangXu\AppData\Roaming\MathWorks\MATLAB\R2010b\compopts.bat
From template: C:\PROGRA~1\MATLAB\R2010b\bin\win32\mbuildopts\msvc90compp.bat
Done . . .
如果出现以上提示,则代表编译器设置完成了,我们就可用 .m 文件生成 .dll文件 了。
在命令窗口输入代码:
mcc -W cpplib:mydrawwithdata -T link:lib drawwithdata.m其中,mydrawwithdata是生成的dll,lib的前缀名字,也就是你最后可以使用的dll以及lib库的名字;drawwithdata.m是需要编译的.m函数。
执行后,等待1~2分钟,编译完成后,在MATLAB路径下,得到了下图中的一些文件:
标记的文件在Microsoft Visual Studio 2008调用的时候有用,其他文件目前没有使用。
3、
打开Microsoft Visual Studio 2008,新建一个名为“MyDrawwithdataTest”的基于对话框的MFC项目,并将上面生成的三个文件拷贝到该工程目录中。
4、
做一些配置工作
1)、选择菜单中“工具”
2)、选择“选项”
3)、在左边点击“项目和解决方案”前的小三角,再选择“VC++”目录
4)、在右边的“显示以下内容的目录”中选择“包含文件”
5)、在下面出现的列表中将以下目录添加进去:“C:\Program Files\MATLAB\R2010b\extern\include” (根据MATLAB的安装目录进行相应改写,以下略,添加方式很简单,可先点击列表的最下一行,再点击右边出现的按钮,再选择相应的目录即可)
6)、再在右边的“显示以下内容的目录”中选择“库目录”
7)、在下面出现的列表中将以下目录添加进去,添加方式同上:“C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft”
【注意】1)到7)的步骤只需要设置这一次,以后不用再设置。
8)、选择“项目”菜单中的“MyDrawwithdataTest属性”
9)、 在左边依次选择:“配置属性”->“链接器”->“输入”
10)、在右边的“附加依赖项目”中,添加 ”mclmcrrt.lib mydrawwithdata.lib”,其中”mydrawwithdata.lib”即为刚刚用matlab生成的 lib文件
【注意】8)到10)的步骤是针对本项目的设置,不同的项目设置不同(mclmcrrt.lib是相同的)。
5、
为对话框添加如下控件,并为“示例编辑框”添加一个成员变量int 型的 m_num。
6、
双击“计算X、Y、Z数据并且绘图”按钮控件,自动跳至“MyDrawwithdataTestDlg.cpp : 实现文件”处的如下位置:
void CMyDrawwithdataTestDlg::OnBnClickedCalbutton(){// TODO: 在此添加控件通知处理程序代码
7、
先不急着添加代码,先在“MyDrawwithdataTestDlg.cpp”的开头include“mydrawwithdata.h”文件,代码如下:
// MyDrawwithdataTestDlg.cpp : 实现文件//#include "stdafx.h"#include "MyDrawwithdataTest.h"#include "MyDrawwithdataTestDlg.h"#include "mydrawwithdata.h"
8、
现在可以转到第6步,添加“通知处理程序代码”,最终,整个“OnBnClickedCalbutton”函数如下:
void CMyDrawwithdataTestDlg::OnBnClickedCalbutton(){// TODO: 在此添加控件通知处理程序代码// 前处理CString str;if (!mydrawwithdataInitialize()){str.Format(_T("faild!\n"));MessageBox(str);return;}// 开始try{UpdateData(TRUE);//刷新输入数据,将输入的数据传递给m_num// mwArray 是C++的一种数据类型,它的用法可以见我的参考3:[原]Matlab代码转C++(二) —— mwArraymwSize num=(mwSize)(m_num);mwArray X(1,num,mxDOUBLE_CLASS);//声明一个mwArray类型的变量X,1乘num维的,里面的数据为mxDOUBLE_CLASS型mwArray Y(1,num,mxDOUBLE_CLASS);mwArray Z(1,num,mxDOUBLE_CLASS);mwSize i;// 在堆中新建数组指针double *xData= new double[num];double *yData= new double[num];double *zData= new double[num];for (i=1;i<=num;i++){xData[i-1]=(double)(i);yData[i-1]=double(i+1);zData[i-1]=(double)(i+2);}X.SetData(xData,num);//为变量X赋值Y.SetData(yData,num);Z.SetData(zData,num); delete [] xData;//析构之前在堆中创建的数组指针 delete [] yData; delete [] zData;drawwithdata(X,Y,Z);//由于include了“mydrawwithdata.h”,因此可以使用函数drawwithdata了。详情可以打开“mydrawwithdata.h”,///在最底下有函数drawwithdata的声明mclWaitForFiguresToDie(NULL);//由于用到MATLAB的图形功能,所以必须使用此函数,否则图形会“闪退”}catch (mwException &e){str.Format(_T("%s"),e.what());MessageBox(str);}mydrawwithdataTerminate();}
9、
运行编译,会出现如下错误
选择“关闭程序”,接着出现
选择“否”。
10、
再编译一次,耐心等待,最后运行界面如下
11、
在输入框内输入“1000”,然后按下按钮,耐心等待,便出现
成功了!!大家可以看到,我的MATLAB并没有打开,却可以出现MATLAB的画图界面,而且支持“缩放”、“旋转”与“平移功能”。
- win7_32位系统下,VS2008与MATLAB R2010b的混合编程(绘图)
- 基于VS2008和Matlab R2010b版本的混合编程的实现(转自:http://blog.sina.com.cn/s/blog_49cb42490100nm5j.html)
- 64位系统在VS2010与Matlab混合编程的下的配置方法
- 64位VS2012+64位matlab R2010b和32位VS2012+32位matlab R2010b 使用matlab engine实现混合编程配置
- VS2008与Matlab混合编程
- Rational_rose_2003在win7_32、64位系统下的安装.docx
- 64位系统vs2010平台下实现C++与matlab R2014混合编程方法示例
- 基于VS2010和Matlab R2010b版本的混合编程的实现
- VS2008 与 Matlab 的混合编程(quadprog函数为例)
- VS2008与Matlab混合编程设置
- 基于64位Windows 10系统的C语言与MATLAB混合编程
- vs2008下的C/C++混合编程
- Ubuntu 下matlab与 opencv混合编程
- MATLAB R2010b 32位和64位安装程序下载与安装步骤
- VS2008.NET 和 Matlab混合编程
- VS2008和MATLAB混合编程基础
- VC与matlab的混合编程总结
- matlab与vb的混合编程
- Eclipse 通过JPA自动生成注解实体
- linux命令学习(5)
- svd奇异值分解
- 在centos7上编译mosquitto源码时,出现问题解决办法
- Android开发菜鸟到高手必备的十本畅销书籍
- win7_32位系统下,VS2008与MATLAB R2010b的混合编程(绘图)
- Phalcon 使用视图
- net-snmp开发代理入门
- 奇异值分解svd
- Guava Cache缓存
- Redis Sentinel机制与用法
- RabbitMQ学习总结(6)——消息的路由分发机制详解
- 开发问题总结
- 经典算法之线切面(1) 切蛋糕