本文根据作者亲自在VISUAL C++ 6.0编译器环境下,实现了MATLAB中COM组件的开发而写成。此方法的实现是在网上各位前辈的基础上完成的。现在,就具体谈一下怎么把一个M文件或 MEX文件,做成可以脱离MATLAB环境的COM组件,并且被VC++调用。 1. 首先,设置合适的编译器。在MATLAB命令窗口里敲:mbuild –setup 和 mex –setup,完成编译器的设置。 ● Please choose your compiler for building standalone MATLAB applications: ● Select a compiler: Compiler: 2 ● Please verify your choices: ● Try to update options file: C:/Documents and Settings/Administrator/Application Data/MathWorks/MATLAB/R14/compopts.bat ● Please choose your compiler for building external interface (MEX) files: ● Select a compiler: ● Please verify your choices: Try to update options file: C:/Documents and Settings/Administrator/Application Data/MathWorks/MATLAB/R14/mexopts.bat Done . . . 2. 设置系统路径。我的电脑->属性->高级->环境变量->系统变量->Path选项,增加以下路径: 3. 做一个简单的M函数(只能是函数不能是文件)。文件名和函数名一致。运行并测试此文件的正确性。 4. 在命令窗口敲comtool,出现com组件builder。选择FILE选项->New Project选项。出现以下界面。 Component name选项:设置com组件的名称,注意不要和上面添加的m文件重名。 5. 单击Project Files->plotclass->M-files,然后选中comtool菜单Project->Add File选项,添加上面写好的plot_test M函数,如下图: 当然,你可以添加更多的M或MEX函数。 6. 单击Build按钮,选中Com Object选项,这时com-builder会帮你自动编译连接该组件,生成所需要的头文件,源文件,接口描述文件,动态连接库文件,等等。在右侧 Build Status显示框里给出了编译的过程和信息。在菜单Component->Component Info里有关于接口、类、库的信息。在C:/MATLAB7/work/plot文件夹里,出现了两个子文件夹,distrib和src,这是我们VC 中需要用到的文件、库、资源、接口等。在src-> plot_idl_i.c中,有关于com类和com接口的GUID。其中CLSID(类的GUID)在VC编程中需要用到。
8. 再次打开类向导,在 Add Class选项内,选中From a typed library,进入C:/MATLAB7/work/plot/src文件夹,选中plot_idl.tlb文件,点击打开OK。 这时一个COM类便加入进来了,查看一下Iplotclass类。里面有些,我们想要的东东。 其次,在CplotView里包含plot_idl.h,math.h头文件,并定义常量PI;并从C:/MATLAB7/work/plot/src/plot_idl_i.c中拷贝类的GUID并复制到PlotView.h文件类定义的上面。 const CLSID CLSID_plotclass = {0xAED07AAF,0x3190,0x4996,{0xAD,0xD6,0x31,0xF9,0x45,0x41,0xB1,0xC5}; 再次在构造函数CPlotView()的上面定义类全局对象; 然后,OnStart()函数里添加获得COM指针的函数,代码如下: 然后,在OnPlot()函数里添加绘图代码,代码如下,这里关于VARIANT变量的用法说明请参照MSDN。 const int N=100; //数组大小 //任意变量 SAFEARRAYBOUND rgsabound[1]; //创立数组 //锁定数组 //数组传递数据 //调用方法 //解锁 最后,在析构函数~CPlotView()里添加释放接口和资源的代码。 10. 测试。先按绿色按钮,初始化OLE和接口,再按红色按钮绘图。注意,开始绿色按扭,比较慢,因为要载入很多DLL,后面红色按钮就快多了,并且第二次执行 会更快。现在是不是感到很爽呢?别急,还有最后一步打包发布。还要注意的是,最好再做个程序,防止多次按下绿色按扭,否则会有错误。当关闭窗口时,所有载 入的资源会自动释放。 11. 打包。再次打开,原来的工程文件*.cbl,注意在前面过程中一定要保存。(matlab会有提示)。然后选择 Component->Package Component,系统就会自己帮你打包了。出现如下图,选中Include MCR,点击Create选项。慢慢等吧。 打包完毕后,在C:/MATLAB7/work/plot/distrib文件夹下,有plot可执行文件。拷贝C:/MATLAB7/work /plot文件夹下所有文件,在另外一个机器上,双击plot可执行程序,注册com组件,就完成了最后的工作。你的程序,就可以在其他机器上执行了。 (这一点,还值得研究,能否自己打包,不用matlab工具呢?plot的执行界面是基于DOS的,很丑)。 (gc315630) |