Matlab和C混合编程的几种方法比较(5)
2.4 DLL 实例
2.4.1 引言
DLL是一个可执行的二进制文件。把很多通用的功能放在DLL中,可以供多个应用程
序调用,而不是每个应用程序在连接时都要增加一个库中目标代码的拷贝。可以整体减少文件外部存储空间的占有量,并实现了代码共享。
(l)根据实际问题的需要,在MATLAB中开发算法。MATLAB的开发环境功能强大,其语言简单直观。而且为用户提供了完善的代码调试工具,用户可以在函数执行的任何时候知道当前局部变量和全局变量的数值。另外,当前用户完成算法的调试工作后,往往希望了解该算法中哪几条语句最消耗计-算时间,MATLAB提供Profiler工具可以很好地解决这一问题。借助于Profiler的强大功能,用户可以完全掌握调用关系比较复杂的程序的执行情况,每一个函数的被调用次数和执行时间都可以清楚地显示出来。用户可以借助编译工具或优化代码工具对算法的瓶颈部分进行处理,尽可能地优化算法,或者将耗时的代码用C实现。这种方法就是前面介绍的MEX方法。
(2)利用Matlab Compiler和VC编译m文件,将开发好的算法转换为C或C++代码,然后生成动态链接库,将算法封装其中。在VC的IDE中开发应用程序的图形用户界面,通过DLL调用已开发好的算法。采取的调用方法一般是通过DLL的头文件获取DLL的功能和函数调用方式,然后在VC中当成普通的C函数调用。这是将要介绍的DLL方法。 2.4.2 原理
DLL方法和前面介绍的Add-in方法大同小异,也是用VC编译器将m文件转化为可以被VC中介编译调用的语言,两者都产生相应的.h文件和.c文件,只是DLL方法的中功能函数有DLL实现,而Add-in方法直接用C/C++代码实现。由以上的介绍,就可以很明白DLL方法需要的为:功能函数的.h文件、.lib文件、.dll文件。下图是Matlab compiler user’s guide中关于独立可执行程序生成的过程,生成DLL的过程也大体相似。Matlab7.0自带的Compiler 4.0比以前的编译器有较大的变化,具体变化不详……
2.4.3 实现过程
以低通滤波器设计为例。M 文件myfilter.m 源代码如下:
function [b, a] = myfilter(wp,ws) [n, wn] = buttord(wp, ws, 3, 30); [b, a] = butter(n, wn);
具体步骤为:
1. 在VC中建立基于对话框的工程test3,包含wp、ws两个输入编辑框和一个测试
按钮;
2. 在matlab命令行中键入mcc -t -W lib: filterlib -T link:lib myfilter,生成一大堆文
件,我们用到的有三个文件:filterlib.h、filterlib.lib、filterlib.dll,将这三个文件Copy到test3目录下;
3. 在VC中作如下设置:(a)Project->Settings->link->Objects/Library Modules中添
加一些库文件名filterlib.lib libmmfile.lib libmatlb.lib libmx.lib libmat.lib libmex.lib libut.lib libmatpm.lib,每个库干什么用我不是很清楚,参考文件中有说明;(b)设置VC的搜索路径,具体操作为在Tools->Options->Directories的inlcude搜索路径中添加
4. 在测试按钮对应的函数中添加Matlab的Math C语句和具体的滤波器设计语句:
double a; double b; double result;
UpdateData(true); a = m_Editwp; b = m_Editws;
mxArray *A = mclGetUninitializedArray(); mxArray *B = mclGetUninitializedArray(); mxArray *C = mclGetUninitializedArray();
filterlibInitialize(); // 请注意:不是InitializeModule_filterlib(); mlfAssign(&A,mlfDoubleMatrix(1,1,&a,NULL)); mlfAssign(&B,mlfDoubleMatrix(1,1,&b,NULL)); C = mlfMyfilter(NULL, A, B); filterlibTerminate();
double *md = mxGetPr(C); result = md[0];
此时,最终的结果就保存在指针result中。具体怎么取出来并不是难事,这里不作研究。 2.4.4 总结
DLL方法和Add-in方法相似,从实现过程也可以看出来。之所以单独提出来,是因为这种做法具有一定的代表性,调用库来实现算法,看起来都气派!
以上是几种方法,还有其他的,尤其是7.0后的版本,我没有研究过。就以上的方法来
讲,我首推Matcom 的方法,其次是Add-in。
第三部分 参考文献
1. 2. 3. 4. VC与Matlab结合方法的分析 姚鑫浩
基于Matlab Add-in的Matlab/VC混合编程的研究 李霞 李萌彦
运用mex文件优化Matlab软件性能 谢莉萍 龙志强 谢海斌 VC与MATLAB混合编程之DLL实现方法 肖永韧 解习农 刘晓峰 5. 6.
…… 此处隐藏:540字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




