




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
matlab7.0.1与vc6.0混合编程之DLL默认分类 2009-10-24 20:35:53 阅读594 评论0 字号:大中小 matlab7.0.1与vc6.0混合编程成功matlab 2008-01-05 18:11 阅读600 评论0 字号: 大大 中中 小小混合编程其实不难,关键是没有一个规范的,真正可以解决设置过程中出现的小问题的方法。我在设置的过程中,遇到了不少问题,花了多半天的时间,终于解决了,顺利地在vc中调用matlab 生成的dll文件中的函数,并返回一个值,探出对话框,显示正确。这种混合编程的方式不能脱离matlab环境,如果需要发布独立的应用程序,需要安装MCR。下面分步骤地讲一下混合编程的设置及其原因:1 matlab方面的操作首先先写一个算阶乘的函数,存成test1.m文件,该文件的内容是:function y = test1(n)y = 1 ;for i = 1 : n y = y * i ;end现在有了文件,下一步我们要设置好系统,设置好matlab,然后再把该文件编译成dll文件。1、在环境变量(我的电脑右键-高级)path中加入binwin32;2、添加环境变量matlab值设为即matlab7.1的安装路径;3、配置mbuild使用的C/C+编译器; 在Matlab命令窗口中输入: mbuild -setup 按照提示选择VC6.0的编译器,完成后在Matlab命令窗口中输入: mex -setup 同样选择VC6.0的编译器,就完成编译器的安装和配置。接下来我们要把.m文件存储的程序编译成dll文件,在matlab命令窗口中输入:mcc -W lib:test1 -T link:lib test1.m这个需要等一小段时间,最终,在当前目录下生成了到此,在操作系统和matlab这一方面的工作就做完了2 vc+6.0中的操作在vc中建立一个MFC AppWizardexe基本对话框工程,名字叫做test1app.1 )在 VC 中创建一个 MFC 工程(本人创建的为基于对话框的),环境设置根据如下帖子: 怎样设置 Visual Studio 与 Matlb Complier 4.0 一起工作 中的指导进行。在本例子中,只需要在 VC 中进行如下步骤: A. Tools-Options-Directories-Show directories for : Include files- ExternInclude ; B. Tools-Options-Directories-Show directories for : Library files- ExternLibWin32Microsoftmsvc60 ; C. Project-Setting-C/C+-Category : Code Generation-Use run-time library : Debug Multithread DLL ; D. Project-Setting-Link-Category : Input-Object/library modules : test1.lib mclmcr.lib libmx.lib libmat.lib libeng.lib 2 )拷贝 MATLAB 当前目录下刚才用 mcc 生成的 test1.h , test1.dll , test1.lib ,以及 test1.ctf 文件到 VC 当前工程目录下,并用 Project-Add to Project-Files 将 test1.h 加入到当前工程中。 3 )在当前工程的对话框的头文件和cpp中加入 #include test1.h 与 #include mclmcr.h ; 工程设置到此就结束了,下面开始写代码:首先需要在对话框的初始化程序BOOL CTest1appDlg:OnInitDialog()内写 if( !mclInitializeApplication(NULL,0) ) /matlab环境初始化 AfxMessageBox( Could not initialize the application.); exit(1); /* Call the library intialization routine and make sure that the * library was initialized properly. */ if (!test1Initialize() /test1Initialize是test1.h中定义的test1函数的初始化函数 AfxMessageBox(Could not initialize the library.); exit(1); 在对话框的确定按钮的消息响应函数内,调用dll中的阶乘函数,void CTest1appDlg:OnOK() / TODO: Add extra validation here /此处为dll中的函数准备好参数,然后调用 double n = 4 ; mxArray * t; /经过matlab编译完的dll 中的函数只能识别mxArray 类型的参数,所以我们在vc中定义的数值/都需要转换成该种格式 t = mxCreateDoubleMatrix( 1 , 1 ,mxREAL);/该函数中的参数1,1定义了 t 这个矩阵的大小 memcpy(mxGetPr(t), & n, sizeof ( double );/给 t 赋值为4 mxArray * y; /准备一个接收返回值的变量 y = mxCreateDoubleMatrix( 1 , 1 ,mxREAL); mlfTest1(1,&y,t); /运行该函数,进行阶乘计算,4的 double r1 = 0; /vc中的接收返回值的函数 memcpy(&r1,mxGetPr(y),sizeof(double); mxDestroyArray(t); /销毁废弃内存 test1Terminate();/中止调用 CString showrslt; showrslt.Format(%f,r1); AfxMessageBox(showrslt);/显示阶乘计算的结果 CDialog:OnOK(); mxDes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公路客运企业信息化建设与业务流程优化考核试卷
- 海洋油气开发工程技术在极地环境的应用考核试卷
- 玻璃医疗器械无菌包装考核试卷
- 肉制品加工业的消费者产品调研考核试卷
- 建筑装饰设计师与职业发展考核试卷
- 水电工程BIM技术应用与协同管理考核试卷
- 砼构件预制件的市场需求预测考核试卷
- 辽宁师范大学《阿拉伯语语法》2023-2024学年第二学期期末试卷
- 泉州医学高等专科学校《护理礼仪(实验)》2023-2024学年第二学期期末试卷
- 秦皇岛职业技术学院《CPC程序设计竞赛算法设计》2023-2024学年第二学期期末试卷
- 正式展会合同协议
- 2025届高三语文4月名校联考作文汇编(审题+立意+范文)
- 工程甩项合同协议
- 费用开支标准管理制度
- 期中模拟卷(新疆专用)-2024-2025学年八年级英语下学期核心素养素质调研模拟练习试题(考试版)A4
- 甲状旁腺切除术后的护理措施
- GB/T 5453-2025纺织品织物透气性的测定
- 2024慢性鼻窦炎诊断和治疗指南解读课件
- (T8联考)2025届高三部分重点中学3月联合测评生物试卷(含答案详解)河北版
- 员工入职申请表(完整版)
- T-GDEIIA 56-2024 垂直起降低空航空器起降场基础设施配置技术要求
评论
0/150
提交评论