,对 class 数据类型; ⑵部分绘图语句无法实现或得不到准确图象,尤其是三维图象; ⑶当涉及到的复杂函数调用时嵌套的文件数量很多。 因此在不涉及到三维做图以及 m 文件不大的情况下推荐使用。
1.5
使用 Matlab 的 Combuilde 工具
COM 是 component object module 的简称,它是一种通用的对象接口,任何语言只要按照
这种接口标准,就可以实现调用它。Matlab6.5新推出来的 Combuilder 就是把用 Matlab 编写 的程序做成 com 组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用 Matlab 的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序 较大、调用工具箱函数或调用函数较多时推荐使用,这也是 Matlab 公司推荐的使用方法。
2 基于 COM 接口的 Matlab 与 VC 混合编程实现 FFT 转换
2.1 创建 Matlab 源文件
在 Matlab 中实现 FFT 转换只需要一个函数即可。 (1) 新建 M 文件,在 M 文件中输入以下两条语句: Function FFT(X,Y) %实现 FFT 转换。函数名为 FFT,x 为输入参数,y 为输出参数 Y=fft(X); %fft 转换实现函数 (2)保存为 FFT.m 的 M 文件。
2.2
在 Matlab 下创建 COM 组建
(1)在 matlab command window 输入如下命令: >>comtool
(2)出现 com 编辑界面后,选择 File->New Project 建立新工程 testfft,并将 FFT.m 加入 到新建工程中。 (3)点击 Build->COM Object…生成 COM 组件。 至此 com 组件已经由 matlab 做好, 默认的保存位置为: matlab 安装位置\work\component。
2.3
VC 下调用 COM 组件
(1)将 testfft_idl.h
和 testfft_idl_i.c 文件拷贝到 VC 建立的工程目录下。两文件默认目录
为\work\component\src (2)将目录/extern/include/下的 mwcomtypes.h 文件拷贝的 VC 建立的目录下。 (3)将上面三个文件加入 VC 工程:工程->添加工程->Files,选择刚刚拷到目录下的 testfft_idl.h 和 testfft_idl_i.c 文件。 (4) 为程序添加头文件 testfft_idl.h 、testfft_idl_i.c 和 mwcomtypes.h (5)填写调用 COM 组件代码: if(FAILED(CoInitialize(NULL))) { AfxMessageBox("unable to initialize COM"); } Itestfft *st=NULL; HRESULT hr=CoCreateInstance(CLSID_testfft,NULL,CLSCTX_ALL,IID_Itestfft,(void //初始化调用 com
**)&;st); if(SUCCEEDED(hr)) { VARIANT x,y; VariantInit(&;x); VariantInit(&;y); x.vt=VT_I4; x.lVal=4; st->fte(x,y); st->Release(); } else { AfxMessageBox("unsucceed"); } 至此实现 VC 下调用 COM 组件实现 FFT 转换。 //x 为输入参数,y 为输出参数
3 结论
实践表明用 COM 方法实现 VC 与 Matlab 混合编程具有实现简单、执行效率高、几乎支 持所有的 matlab 函数、易移植等优点。 参考文献 参考文献 〔1〕张小毛,原义光,葛仁伟,刘维亮 Matlab,Matcom 与 VC++接口的实现 2001年 8 月
计算机应用第21卷第8期 〔2〕 盛歆漪, 须文波, 边继东 Matlab、 Matcom 与 VC+ + 混合编程在 FFT 上的实现 2003 年10月 江南大学学报(自然科学报) 第2卷 第4期 〔3〕徐士良,C
常用算法程序集 北京清华大学出版社 ,1996