版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 vs2010和Matlab R2012b 混合编程2013-05-24 22:40 10114人阅读 评论(4) 收藏 举报 分类: C+(2) 版权声明:本文为博主原创文章,未经博主允许不得转载。思路:为了实现matlab与C+混合编程,采用由m文件构造动态链接库然后在visual studio中调用的方法。本人系统:Windows 7旗舰版(32位),VS2010旗舰版,Matlab R2012b 只有R2010b或以上版本才识别VS2010编辑器
2、60;1. matlab中dll创建 1.1 m文件编写 function yt = myfitline( x,y,m,xrange,t ) %xy为坐标向量,m为多项式阶数,xrange为显示图上面的坐标范围,t为要求的坐标横轴位置
3、; % Detailed explanation goes here p=polyfit(x,y,m);%计算各阶系数p1xm+p2x(m-1)+.+ pmx+ p(m+1) yy=polyval(p,xrange);%计算一个区域内的函数值用于画图
4、60; yt=polyval(p,t); % 计算指定x下的函数对应的y值 plot(x,y,'r*',xrange,yy,'b') end 1.2 设置编译器&
5、#160; >> mex -setup 选择VS2010 >> mbuild -se
6、tup 选择VS2010 >> mcc -W cpplib:Myfitline -T link:lib myfitline (这就创建好了)
7、60; 其中,mcc是Matlab提供的编译命令,对于这一点,Matlab的帮助说明如下: -W lib:string link:lib其中-W是控制编译之后的封装格式,cpplib,是指编译成C+的lib,cpplib冒号后面是指编译的库的名字,-T表示目标, link:lib表示要连接到一个库文件的目标
8、,目标的名字是后面的myfitline,即你写的m函数的名字。 运行完之后,你的目录下面,将会出现以下一些文件: Myfitline.cpp
9、160; Myfitline.exp Myfitline.dll Myfitline.exports Myfitline.h
10、0; Myfitline.lib mccExcludedFiles.log readme.txt &
11、#160; 具体每一个文件的意思,请查帮助,这里只说其中很有用的几个: Myfitline.dll是编译好的动态库,myfitline这个函数封装在里面,Myfitline.h是对应的头文件,在C里面调用这个函数的时候,需要include这个头文件,
12、160;在这个头文件的最后,你可以看到下面的内容: extern LIB_Myfitline_CPP_API void MW_CALL_CONV myfitline(int nargout, mwArray& yt, const mwArray& x, const mwA
13、rray& y, const mwArray& m, const mwArray& xrange, const mwArray& t); 这就是myfitline的C函数的声明。nargout表示输出变量的个数,其他就是对应了m函数的几个变量。
14、 注意,变量的类型是mwArray,这是Matlab提供的一个特殊的变量类型(在7.0的版本,编译之后,变量类型是mxArray)。mwArray是一个类,具体可以查帮助。 2.系统环境配置 Computer - > Properties
15、160;-> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下为MATLAB 2012软件安装目录) .MATLABexternlibwin32microsoft;
16、; .MATLABbinwin32 Computer - > Properties -> Advanced system settings -> Environment Variab
17、les -> System Variables -> path, 添加 .MATLABruntimewin32; .MATLABbin;
18、0; .MATLABexternlibwin32microsoft; .MATLABbinwin323.vs2010环境配置 Property Pages -> VC+ D
19、irectories -> Include Directories, 添加(安装目录下) .MATLABexterninclude Property Pages -> VC+ Directories ->
20、Library Directories, 添加 .MATLABexternlibwin32microsoft Property Pages -> C/C+ -> General -> Additional Includ
21、e Directories, 添加 .MATLABexterninclude Property Pages -> Linker -> General -> Additional Library Di
22、rectories, 添加 .MATLABexternlibwin32microsoft Property Pages -> Linker -> Input -> Additional Dependencies, 添加&
23、#160; libeng.lib
24、160; libmat.lib libmex.lib
25、0; libmx.lib mclmcrrt.lib
26、 mclmcr.lib Myfitline.lib 4.vs2010下完成程序
27、60; 把刚才生成的*.h *.dll *.lib文件复制到刚刚新建的工程的文件夹下,并且用添加现有项添加的工程中。(此处的*代表你的m文件名称) 调用函数 myfitline的文件前要 &
28、#160; #include "mclmcr.h"
29、#include "matrix.h" #include "mclcppclass.h"
30、160; #include "Myfitline.h” 具体程序如下: void CNewFeatureofS
31、tormView:Onposition() / TODO: 在此添加命令处理程序代码
32、0;if( !MyfitlineInitialize() MessageBox(_T("初始化失败");
33、60; / 为变量分配内存空间,可以查帮助mwArray &
34、#160; mwArray mwX(5, 1, mxDOUBLE_CLASS); / 5,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵, mwArray mwY(5, 1, mxDOUBLE_CLASS);/为了和Cpp变量接轨,设置成1*5的矩阵,mxDOUBLE_CLASS表示变量的精度)
35、0; mwArray mwM(1, 1, mxDOUBLE_CLASS); mwArray mwXR(50,1, mxDOUBLE_CLASS);
36、; mwArray mwYT(1,1, mxDOUBLE_CLASS); mwArray mwT(1,1, mxDOUBLE_CLASS);
37、160; int x5=432,435,438,441,443; /样本点坐标 int y5=136,138,140,145,147; /
38、60; int xr50,m=3,t=446; /参数设置 for (int i=400;i<450;i+)
39、0; xri-400=i;
40、0; mwX.SetData(x, 5); /调用类里面的SetData函数给类赋值 mwY.SetData(y, 5);
41、; mwM.SetData(&m, 1); mwXR.SetData(xr, 50); &
42、#160; mwT.SetData(&t, 1); myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);
43、0; double c = mwYT.Get(1, 1); /调用类里面的Get函数获取取函数返回值 CString strNumber; strNumber.Format(_T("
44、%lf"),c); MessageBox(strNumber, _T("坐标"); / 后面是一些终止调用的程序 &
45、#160; MyfitlineTerminate(); / terminate MCR
46、; mclTerminateApplication(); vs2010下调用matlab2012b调试方法标签: matlabvs2010配置管理64位error LNK20192013-11-01 16:53 4435人阅读 评论(2) 收藏 举报 分类: matlab(3) vs2010版权声明:本文为博主原创文章,未经博主允许不得转
47、载。配置环境:vs2010+matlab2012b+win7 64位说明:以安装路径“E:Program FilesMATLABR2012b”为例MATLAB外部支持文件夹:E:Program FilesMATLABR2012bexternmatlab自带的c例程:E:Program FilesMATLABR2012bexternexampleseng_matengine.h的位置:E:Program FilesMATLABR2012bexterninclude各种lib的位置:E:Program FilesMATLABR2012bexternlibwin64microsoft在matlab帮
48、助中输入“C language”即可找到有关MATLAB Engine的一个页面。从这个页面开始,学习各种关键词,就能够找到一切你需要的资料。使用MATLAB Engine一般用两套函数就可以了。1.engXXXX,关于Engine本身的操作,包括打开/关闭,设置/取得变量,执行语句等等。2.mxXXXX,关于数据类型mxArray的操作,与MATLAB交互的左右类型全部为mxArray。搭建过程:1.先在VC6的tools->options->directories里添加相关目录include files:E:Program FilesMATLABR2012bexternincl
49、udeE:Program FilesMATLABR2012bexternincludewin64library files:E:Program FilesMATLABR2012bexternlibwin64microsoft2 点击LInker input 将libmx.lib;libmex.lib;libeng.lib;加入到Additional Dependencies 或者用#pragma comment (lib, "libeng.lib") &
50、#160; #pragma comment (lib, "libmx.lib") #pragma comment (lib, "libmex.lib") 语句3 环境变量加上E:Program FilesMATLABR2012b
51、binwin64 否则编译成功运行时会显示缺少 dll4包含头文件 engine.h5这就可以去调用engine里的一些引擎函数了做好这些后,如果我们环境一样,下面的代码应该能够编通并且正常执行,其中包含了常用的一些函数,一般来说使用Engine的时候也就用这些了。出现问题解决方法:1 编译出现:1>test.obj : error LNK2019: 无法解析的外部符号 _engClose,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _engSetVisible,该符号在函数 _main 中被引用1>test.
52、obj : error LNK2019: 无法解析的外部符号 _mxDestroyArray,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _mxGetData,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _mxGetDimensions_730,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _mxGetNumberOfDimensions_730,该符号在函数 _main 中被引用1
53、>test.obj : error LNK2019: 无法解析的外部符号 _engGetVariable,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _engEvalString,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _engPutVariable,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _mxGetPr,该符号在函数 _main 中被引用1>test.obj
54、 : error LNK2019: 无法解析的外部符号 _mxCreateDoubleMatrix_730,该符号在函数 _main 中被引用1>test.obj : error LNK2019: 无法解析的外部符号 _engOpen,该符号在函数 _main 中被引用1>D:VSProjectsmatlabtestmatlabtestDebugmatlabtest.exe : fatal error LNK1120: 12 个无法解析的外部命令这个问题如果你按照上述配置好的话,这就很有可能出在兼容问题上。因为2012b只提供64位版本,所有需要将vs工程变为64位。点击win32
55、旁的下拉列表,选择配置管理器。在活动解决方案平台这里选择x64即可。重新编译一切ok。2 如果vs工程中还包含其他库是32位的,那么只能装matlab7 ,他只支持32位。而且matlab6.x版本又不支持vs2010.装好以后,需要配置兼容性。然后点击其桌面的快捷方式,修改其兼容性,我的系统是win7,改成了兼容vista,保存修改,点击成功运行。uniquews· 博客园· 首页· 新随笔· 联系· 订阅· 管理随笔- 51 文章- 0 评论- 7 VS2010与Matlab2010b混合编程VS
56、2010与Matlab2010b混合编程 套用今天的签名“最新的VS+最新的MATLAB+最新的WINDOWS=无尽的烦恼 ”,用了一天的时间去配置相关的环境,确实很囧。好在现在问题解决了,特发布过程如下,希望能给有需要的朋友带来帮助。 注:因为程序也是刚调通,所以有些原因还没有仔细分析,如果不对,敬请指教。1.<MATLAB>表示MATLAB按照目录2. 配置过程中的错误,请见:附录3.文中包含"只针对64位WINDOWS"字眼设置的,在WIN32(X86)环境无需设置4.本文配置
57、中可能包含多余的一些配置,不过现在的目的是运行成功哈至于精简部分,待我和大家使用时慢慢研究。 /*环境:1.VS20102.MATLAB 2010b3.WINDOW 7 (X64)*/ 1.Matlab环境设置 要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C+编译器以及Matlab C/C+数学库函数和图形库函数。Matlab编译器使用mbuild命令可以直接将C/C+源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的
58、接口来调用Matlab数学库函数。 虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C+数学库文件或者图形库文件的支持才能运行。但如果C/C+源代码完全是按传统C/C+源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。 在 Matlab 的Command Window 下输入命令
59、mbuild setup 操作过程如下图: 然后输入命令 mex setup 以类似的方法配置编译器。Matlab 的配置完成。 2.VS环境设置(1)设置Include 和Library 目录 项目右键->属性->VC+目录->包含目录:添加 <MATL
60、AB>R2010bexternincludewin64 <MATLAB>R2010bexterninclude 项目右键->属性->VC+目录->库目录:添加 <MATLAB>R2010bexternlibwin32microsoft <MATLAB>R2010bexternlibwin64microsoft 截图(部分): (2)设置工程目录 项目右键->属性->C/C+->常规->附件包含目录:添加 <MATLAB>R2010bexternincludewin64 <MATLAB>R2010bexterninclude
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮业油烟机维护保养合同2026
- 环境监测数据质量管理规定
- 作业许可审批管理制度
- 吸烟危害评估干预健康方案
- 术后营养康复膳食方案
- 工作人员交接班管理制度细则
- 常见农药残留快速降解处理方案
- 沼渣沼液田间施用操作规范
- 古法刮痧排毒方案
- 减肥瘦身代餐制作服务流程
- 2024新高考I卷全国统一考试高考物理试题(真题+答案)
- 《火力发电厂监控系统信息安全技术监督导则》
- (正式版)JBT 6315-2024 汽轮机焊接工艺评定
- 【北师大版】小学六年级下册英语全册教案
- 肿瘤病人化疗所致脱发护理
- 西方经济学(第四版)全套教学课件
- 五年级道德与法治下册 (推翻帝制 民族觉醒)课件
- 桥梁工程钢箱梁拖拉施工专项方案 配图丰富
- 住宅烟道系统技术标准
- GB 16897-2022制动软管的结构、性能要求及试验方法
- GA 466-2009警服训练服
评论
0/150
提交评论