EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于COM的Matlab参数处理与图像嵌入到VC的研究8 R0 o' Y4 C( U& `( a. Y0 Y
基于COM组件的Matlab与C++混合编程方式因拥有独立的运行环境和两种语言的互补优势而被众多科研人员和编程人员所接受,同时也是MathWorks公司推荐使用的混编方式。但在程序设计过程中,通常会遇到两个难点问题:(1)二维数组参数的传递与输出; (2)Matlab生成图形嵌入VC工程界面中。对于第一个问题,Bruce McKinney[1]在MSDN上指出;“如果对一维数组进行操作,则SAFEARRAY函数变的简单且易操作。但是对于多维数组,同样的操作要复杂得多”,造成这一问题的根源在于Matlab与C++对多维数组元素的存储方式不同。而在本项目开发过程中回避了这个复杂的过程,转而利用Matlab强大的数组处理功能将其解决。Matlab完善的图形处理功能是其被科研人员所推崇的原因之一,但因其图形拥有独立的窗口,严重影响了整体界面美观和用户交互体验,所以Matlab图形嵌入是混合编程中不可回避的问题。对此将通过实例介绍两种图形嵌入方法并分析说明其优缺点和相关细节。 本文示例均在Matlab R2008a和VC 6.0平台下完成,且通过调试能够正常运行。 1 Excel文件读取方法 VC平台下的Excel文件读取方式复杂难懂,但如果使用Matlab与VC的混合编程方式编写将更加简便,而且拥有较强的可扩展性。下面代码详细讲解了该过程。 (1)在Matlab平台下建立CExcelRead.m文件,代码如下: function [output,row,col] = CExcelRead(filePath) //filePath包含了指定文件的路径和文件名,由VC平台函数GetPathName()获取 [typ, desc] = xlsfinfo(filePath); //xlsfinfo()可获取指定Excel文件中各个sheet工作区的名称,返回值存入名为desc的cell数组中 sheet1 = cell2mat(desc(1)); //默认打开”sheet1”(名称任意),并将其转换为字符串 output = xlsread(filePath,sheet1); //返回该Excel文件中的数据,返回值存入output数组中 [row,col] = size(output); //获取录入数据的行列值,返回到VC平台以供其拷贝指定内存大小的数据 output = reshape(output,row*col,1); //将该二维数组转换为一维。这是第二部分二维数组处理的第一步 保存文件后,使用deploytool工具将其制作成名为FileOpen的COM(封装MCR),注册该控件并将相应的文件拷贝到MFC的工程中,对于基础操作此处不再赘述。
: S* g0 A- M2 _' c7 x
7 z4 d. ?4 w4 C( a |