




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件英才网 软件行业驰名招聘网站Vc调用matlab导出的dll,实现vc与matlab混合编程 Vc调用matlab导出的dll,实现vc与matlab混合编程 写这篇博客的目的就是想把前段时间的工作交接下,让后来人接手这个项目的人迅速的入门。文章虽短,在项目初期可是搜刮了很多资料花了不少的时间。 为了与win7兼容,matlab应该安装2010a或2010b。Matlab7导出的dll在win7下的vc2010中不兼容。1:首先为matlab选择编译器 在命名行窗口输入:mex -setup 按照提示选择vc20102:选择builder 输入:mbuilder -setup 同样选择vc20103:将使用matlab写成的代码封装成函数,确认无错后开始生成dll。 在命令行输入:mcc -W cpplib:h_single -T link:lib h_single.m 其中h_single是要导出的dll名称,h_single.m是matlab源文件。不同版本的matlab生成dll的时间不一样,不知道我使用的matlab2012a为什么这么慢。 如果一切顺利,那么在.m文件目录下将会产生.lib,.dll,.h,.cpp,.ctf(matlab2010好像不再生成.ctf文件)等几个文件。我们需要使用.lib,dll,.h文件。dll生成后,剩下的就是在vc中调用了。这跟使用其他dll是一样的。首先要包含dll头文件,除了要将本次生成的.lib文件填入:链接器-输入内。还需要加入mclmcr.lib 和mclmcrrt.lib。最后将dll文件放在可执行文件目录下。matlab2010好像不再生成.ctf文件,因此不需要将ctf文件放在当前目录下,而在matlab7中却需要。 这些都只是准备工作,包含了头文件才能在vc内使用。传入matlab函数的数据是有一定格式的。因此需要将数据准备下,准备好之后传给matlab计算函数。至于传入的数据格式,可以参照我写过的代码,很简单。我也做了详尽的注释。上面只是把整个过程简单的介绍一遍,如果有其他问题可以参考我的其他博文。包括具体编译器的设置,出现过的错误及解决方案。所有这些都在vc与matlab混合编程目录下/ithzhang/article/category/1120011示例代码,注意传给dll导出函数的参数的类型:cpp view plaincopy1 #includestdafx.h 2 #includemyh_single.h 3 #includeh_single.h 4 5 /*/ 6 /* single_cal函数。单回路水平排列。 */ 7 /* BY: ithzhang */ 8 /* date: 2012年4月11日 11:32 */ 9 /* modify date:2012年4月12日19:47 改正matlab 生成的dll库无法多次被调用的bug*/ 10 /* */ 11 /* current:电流,p:3*2数组, 坐标 */ 12 /* delta:步长,left:坐标系左起始点,right:坐标系右结束点, xy:传出,: */ 13 /* 综合磁场强度数组。x:传出:水平磁场强度数组,y:垂直磁场强度数组。 */ 14 /* 三数组长度均为:(right-left)/delta +1 */ 15 /* */ 16 /*/ 17 18 19 20 21 22 bool h_single_cal(double current,double coordinate32,double delta, 23 double left,double right,double Height,double *(&xy),double *(&x),double *(&y) 24 25 static bool IsInitialzied=false; 26 /*/ 27 /* 初始化h_single库,仅能初始化一次,否则将会出现各种错误 初始化时间很长 */ 28 /*/ 29 if(IsInitialzied=false) 30 31 if(!h_singleInitialize() 32 return false; 33 IsInitialzied=true; 34 35 36 /*/ 37 /* 定义mwArray类型的各个变量,传入matlab导出的h_single函数。 */ 38 /*/ 39 mwArray ii (1,1,mxDOUBLE_CLASS); 40 mwArray p (3,2,mxDOUBLE_CLASS); 41 mwArray step (1,1,mxDOUBLE_CLASS); 42 mwArray s1 (1,1,mxDOUBLE_CLASS); 43 mwArray s2 (1,1,mxDOUBLE_CLASS); 44 mwArray H (1,1,mxDOUBLE_CLASS); 45 int num = (right-left) / delta; 46 num+;/不要忘了加1哦。 47 48 mwArray B_m(1,num,mxDOUBLE_CLASS); 49 mwArray B_x(1,num,mxDOUBLE_CLASS); 50 mwArray B_y(1,num,mxDOUBLE_CLASS); 51 52 ii(1,1) = current; 53 step(1,1) = delta; 54 s1(1,1) = left; 55 s2(1,1) = right; 56 H(1,1) = Height; 57 for(int i = 0;i 3; i+) 58 59 for(int j = 0;j 2; j+) 60 61 p(i + 1,j + 1) = coordinateij; 62 63 64 65 /*/ 66 /* 调用matlab导出的h_single函数。h_single( 传出参数个数,传出参数,各个传入参数) */ 67 /*/ 68 69 h_single(3,B_m,B_x,B_y,ii,p,step,s1,s2,H); 70 71 72 /*/ 73 /* 为传入指针申请内存空间,存储从h_single返回的结果。注意xy,x,y传入时是引用类型的指针*/ 74 /* 在外部使用后,要注意释放这里申请的堆空间,否则将会导致内存泄露。 */ 75 /*/ 76 xy = new doublenum; 77 x=new doublenum; 78 y=new double num; 79 80 /*/ 81 /* 从MxArray类型的返回值中得到数据。 */
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人融资担保协议二零二五年
- 公司股份分配协议书二零二五年
- 2合伙人合同样本
- 借用协议合同样本
- 六年级体育教案
- 乳品销售合同样本
- 二十类典型合同样本
- 个人雇短工合同样本
- 学习房地产项目工程质量管理与监控心得
- 2025物业管理合同协议范本
- 2023年北京市农林科学院事业单位招聘(共500题含答案解析)笔试历年难、易错考点试题含答案附详解
- 尿崩症诊疗规范内科学诊疗规范诊疗指南2023版
- 3D打印实训指导书
- 除草机器人简介
- 当代文学第一章1949-1966年的文学思潮
- 抽油井检泵作业课件
- a320飞机空调系统工作原理与使用维护分析
- 施工机具进场检查验收记录
- 《液压与气动技术项目教程》高职配套教学课件
- 2022年七步洗手法操作考核评分标准
- 过敏性紫癜的护理PPT课件(PPT 33页)
评论
0/150
提交评论