数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2720|回复: 0

浅析VC与Matlab联合编程

[复制链接]
发表于 2005-7-23 01:05:43 | 显示全部楼层 |阅读模式
< align=center><B>浅析VC与Matlab联合编程&lt;三&gt;<BR></B><BR>作者:<a href="mailtc_dinco@sina.com" target="_blank" >邓科</A></P>
<>  在“<a href="http://www.vckbase.com/document/viewdoc/?id=1435" target="_blank" >浅析VC与Matlab联合编程&lt;一&gt;</A>”和“<a href="http://www.vckbase.com/document/viewdoc/?id=1465" target="_blank" >浅析VC与Matlab联合编程&lt;二&gt;</A>”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll)。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。<BR>  实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。<BR>  首先在Matlab编辑器里编辑m函数文件:启动matlab-&gt;File-&gt;New-&gt;M-file 函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。<BR><BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img1.jpg" border=0><BR>图1 m函数huatu.m<BR><BR>在matlab下建立COM组件,步骤如下: <BR>1、在matlab command window 输入如下命令: <BR>&gt;&gt; comtool <BR>出现com编辑界面,如图2: <BR><BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img2.jpg" border=0><BR>图2 com组件编辑界面<BR><BR>2、新建工程:File-&gt;New Project…,如图3。 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img3.jpg" border=0><BR>图2 com组件属性设置<BR><BR>3、设置组件属性,在"Component name"项中填写组件名称"component",这时候会自动生成类"component",在"Class name"项中填写类名称"huatu",如图4, <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img4.jpg" border=0><BR>图4 com组件属性设置1<BR><BR>  为了便于区分,选中"Classes"中的"component",点击“remove”按钮,将类component移除,再点击"Add&gt;&gt;"添加新类huatu,结果如图5。点击"OK",接下来出现一个对话框,选择"Yes". <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img5.jpg" border=0><BR>图5 com组件属性设置2<BR><BR>4. 添加文件:选中左边工作区的"huatu",点击Project-&gt;Add File…,选择已经编辑好的函数文件huatu.m,如图6。需要注意的是m文件必须是m函数,否则会报错,如果是m脚本文件的话,只需要改为无输入输出参数的m函数即可。 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img6.jpg" border=0><BR>图6 添加m文件<BR><BR>5、生成 com组件:点击Build-&gt;COM Object…,结果如图7。 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img7.jpg" border=0><BR>图7 <BR><BR>com组件已经由matlab做好,默认的保存位置为:matlab安装位置\work\component。 <BR><BR>VC中调用COM组件,步骤如下: <BR>1、在VC中建立名为ComHuaTu的基于对话框的MFC(exe)。 <BR>2、面板上添加一个名为“画图”的button按钮,如图8。 <BR><BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img8.jpg" border=0><BR>图7 工程界面 <BR><BR>3、将component_idl.h 和component_idl_i.c文件拷贝到VC建立的工程ComHuaTu目录下。两文件默认目录为<MATLAB根目录>\work\component\src <BR>4、将上面两文件加入工程:工程-&gt;添加工程-&gt;Files,选择刚刚拷到目录下的component_idl.h 和component_idl_i.c文件。 <BR>5、将目录<MATLAB根目录>/extern/include/下的mwcomtypes.h拷贝到工程ComHuaTu目录下,并加入到工程中,方法同上。 <BR>6、为程序添加头文件component_idl.h 、component_idl_i.c和mwcomtypes.h,结果如图9 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img9.jpg" border=0><BR>图9 添加头文件<BR><BR><BR></P><RE></PRE>7、按钮画图函数添加代码: <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img10.jpg" border=0><BR>图10 添加按钮函数代码<BR><BR>函数代码的意义涉及到COM,正在写VC调用COM组件所涉及到的有关COM方面的知识。 <BR>8、设置预编译头文件:工程-&gt;设置(快捷键Alt+F7),选择C/C++项precomplied Headers,设置如图11 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img11.jpg" border=0><BR>图11 预编译头文件设置<BR><BR>9、编译、连接、运行,结果如图12。 <BR><IMG src="http://vckbase.com/document/journal/vckbase43/images/VCMatlab3img12.jpg" border=0><BR>图11 运行结果<BR><BR>  可以看出利用VC调用com组件的方式来调用matlab比较简单,而且几乎支持matlab所有的函数,在m文件较大、用matcom、调用math library或使用mcc方式无法实现的时候,推荐使用。需要说明的是,以上程序拷到另一台机器上是无法直接运行的,因为COM组件没有新机器上注册,如果要在另一台机器上使用的话,还需要打包安装COM组件,并且由于本程序代码很简单,所以也就不提供源程序了,自己可以动手做一下。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 12:52 , Processed in 0.051904 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表