VC与MATLAB混合编程的方法及实现.pdf

上传人:asd****56 文档编号:70331300 上传时间:2023-01-19 格式:PDF 页数:4 大小:160.54KB
返回 下载 相关 举报
VC与MATLAB混合编程的方法及实现.pdf_第1页
第1页 / 共4页
VC与MATLAB混合编程的方法及实现.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《VC与MATLAB混合编程的方法及实现.pdf》由会员分享,可在线阅读,更多相关《VC与MATLAB混合编程的方法及实现.pdf(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、混合编程的方法及实现 姜长元 湖州师范学院理学院 浙江 湖州 3 1 3 0 0 0 南京师范大学数 学与计算机科学学院 南京 2 1 0 0 9 7 摘要:Ma d a b是功能强大的工程计算和数据分析软件,V i s u a l c+是面向对象的快速 开发工具。二者结 合,可以开发出具有友好界面,满足工程领域应用的软件。通过Ma t l a b 6 5和V i s u a l c+6 0的几种混合编程 的方法,比较 了它们的优缺点,并以实例说明。关键词:Ma t l a b;Vi s u a l C+:混合编程 引 言 M a rl a b 是 M a t h Wo r k s 公 司推

2、出的一套高性能的数 值计算和可视化软件。它是一个高度集成的系统,集科 学计算、图像处理、声音处理于一体,具有极高的编程 效率。V C+是一种 面 向对象 的 可视 化编 程语 言。但 V C+在数值处理分析和算法工具等方面,其效率远远 低于 M a t l a b 语 言。在准确方便地 绘制数据 图形方面,M a t l a b 语言更具有无可 比拟 的优势。此外,M a fl a b 还提 供功能强大的工具箱。但 Ma t l a b的缺点是不能实现端 口操作和实时控制。因此,若能将两者结合运用,实现 优势互补。将获得极大的效益。1 M a t l a b和 V C+混合编程的思路 在 V

3、C的集成开发环境下使用 M a t l a b,可 以利用 M a t l a b的数学库将 M a t l a b的程序编译为 V C编译器所 能识别 的源代码嵌 入 V C的环境。熟 悉 M a t l a b C或 C+数学库 的人也可用 C或 C+的语法在 V C的环境 里直接编写程序。不过,M a t l a b的数学库在开发时似乎 倾向于编译独立的可执 行程序,把 V C只作 为一个编 译和连接的工具 而没有过多地考虑在 V C的集成环 境下进行开发。这给混合编程带来了很大的不便 经过多次实践,总结出下列几种接 口方法。调试环 境 为 Ma t l a b 6 5和 V C+6 0

4、开发 平 台,以 下均 假 定 M a t l a b 6 5安装在 C:l a t l a b 6 p 5目录下。电脑知限与技术 镊溺 躇 2 M a t l a b和 V C+混合编程的具体实现 2 1 使用 M a t l a b E n g i n e 所谓 M a t l a b E n g i n e 是指一组 M a t l a b提供的接口 函(E n g i n e A P I 函数)支持 C语言。M a t l a b E n g i n e采 用客户机 服务器 f C l i e n t S e r v e r)的计算方式,Ma t l a b E n g i n e 作

5、为服务器,C应用程序作为前端客户机,通过 Wi n d o w s的动态控件(A c t i v e X)与服务器通信,向 M a t 1 a b E n gi n e传递命令和数据信息,从 M a t l a b E n g i n e 接 收数据信息。用户可以在 C应用程序中调用这些接1:3 函数,实现对 M a t l a b的控制。可实现 的控制功能主要 有:e n g O p e n:打开 M a t l a b 引擎:e n g C l o s e:关闭 Ma t l a b引擎:e n g E v a l S t r i n g:向 M a t l a b发送字符 串:e n g

6、 G e t A r r a y:读取 M a t l a b 工作空间的数组:e n g p u t A a y:将 C程序 中创建的数组写入 M a t l a b 工作空间:e n g O u t P u t B u ff e r:获取 M a t l a b 命令窗1:3 的输。调用 E n g i n e接 1:3 函数 的 C应用程序称 为引擎程 序。引擎程序可以在 M a fl a b环境下编译和连接,也可 以在 V i s u a l C+6 0的 I D E中编译和连接 两者有所不 同。2 1 1 在 Ma t l a b环境下编译和连接引擎程序 以 M a t l a b

7、6 5自带的示 范程序 e n g w i n d e m o c为例,维普资讯 http:/ 可以在 M a t l a b命令窗 E 1 中用 m e x 命令编译为e x e程 序。m e x 命令 的默认配置文件是 m e x o p t s-b a t,该文件是 为生成 m e x 程序专用 的,编译引擎程序不能使用这个 配置文件。在 目录 c:h n a t l a b 6 p 5 i n w i n 3 2 h n e x o p t s 下找 到 m s v c 6 O e“g m a t 叩t s h a t,用文本编 辑器 打开它,找 到 以下这行:s e t M S V

8、C D i r-m a t l a b 将 后面的m a fl a b 修改为用户 的 V C安装 目录。修改完毕,将其命名为 m y e n g m a t o p t s b a t,以后就可以 用这个文件作为 m e x命令编译引擎程序 的配置文件 了。在 M a t l a b 6 5 环境下,进人要编译的文件在 目录,执行命令:m e x f m y e n g m a t o p t s b a t e n g w i n d e m o C 命令执行后 会生成 e n g w i n d e m o e x e文件 可以双 击运行它,稍后会在后台启动一个 M a d a b的简易

9、命令 窗 E 1 并显示 出一条抛物线以及一个对话框。2 1 2在 V C+6 0的 I D E中编译和连接 引擎程序 以 M F C A p p Wi z a r d(e x e)为模板 建立名为 E n-g v c D e m o的工程,选择单文档,其它的接受默认设置。(1)设置 V C选项:进人 T o o l s I O p t i o n s I D i r e c t o r i e s 页 面 在 S h o w d i r e c t o ri e s f o r 的下拉列表中选择 I n c l u d e fi l e s 添 加路径 c:n a t l a b 6 p 5

10、 e x t e mk i n c l u d e;选 择 L i b r a r y fi l e s 添 加路径 c:I T l a t l a b 6 p 5 e x t e mU i h、w i n 3 2 I T l i c m s o f t I T l s v c 6 0。(2)设置工程选项:进人 P r o j e c t t S e t t i n g s l L i n k页面,在 O b j e c t L i b r a ry m o d u l e s 编辑框中 添加文件名:l i b m x 1 i b l i b m a t 1 i b l i b e n g 1

11、 i b。(3)在工程中添加源文件 m a t l a b c p p,编辑其内容 如下:#i n c l u d e“s t d a f x h”#i n c l u d e“e n g i n e h”,每一个引擎程序都必须包含此头文件 v o i d Ma t l a b D r a w 0 E n g i n e e p;i f(!(e p:e n g 0 p e n(N U L 1 )M e s s a g e B o x(H WN D)N U L L,“C a n t s t a r t M A T L A B e n g i n e”,“Ma t l a b D r a w”,M

12、B一0 K);e x i t(-1),】e n g E v a l S t r i n g(e p “x=0:0 0 1:2 p i;y=s i n(x);p l o t(X,y);”);e n g E V a l S “g(e p,“t i t l e(M a t l a b D r a w i n g );”);e“g E v a l S n g(e p,“x l a b e l(X );”);e n g E v a l S t r i n g(e p,“y l a b e l(Y );”);M e s s a g e B o x(N U L L,“P r e s s O K t o c

13、l o s e”,“E n g v c D e-m o”,MB_O K);e n g C l o s e(e p);】(4)编辑主菜单,添加主菜单项 E n g i n e及其子菜单 D e m o 并 为子菜单 D e m o生成 消息处 理 函数(在 类 C E n g v c D e m o V i e w中实现1 然后将其编辑如下:v o i d C E n g v c D e m o V i e w:O n E n g i n e D e m o 0 T O D O:A d d y o u r c o m m a n d h a n d l e c o d e h e r e M a

14、 t l a b D r a w 0;】(5)在文件 E n g v c D e m o V i e w h的头部添加函数声 明:e x t e m v o i d M a t l a b D r a w 0;至此 工程已经建立并设置完毕 可以开始编译和 连接。运行之后,单击菜单 E n g i n e I D e m o,稍候会在后 台启动一个 M a t l a b的简易命令窗E 1,并绘出一条正弦 曲线。该方法的特点是:混合编程后的可执行程序脱离 不 了 M a t l a b的运行环境:另外一方面在调用引擎之后 是按照 Ma fl a b的执行方式进行的 由于 M a t l a b是

15、解释 执行代码 运行速度很慢。2 2 利用 m c c 命令 M a t l a b数学库和图像库是专门为脱离 M a fl a b环 境而开发的 C C+程序库。有了M a t l a b 数学库和图像 库 用户可以用 M a t l a b的 m c c 命令将 M a t l a b程序直接 编译为可执行程序 或者生成 中间的 C C+代码,再嵌 人用户 的 C C+程序中编译和连接。m c c 命令的执行需要调用 m e x 命令。因此要按照 前面所说的配置好 m e x才可以用 m c c。需要明确的是,m c c 是编译 M a t l a b的源程序(m文件),而 m e x 是

16、编译 C C+的源程序(C 文件或 c p p文件),二者有所不 同。下面着重介绍如何在 V i s u a l C+6 0的 I D E中重 新利用 m c c 生成的 C+代码,以M F C A p p Wi z a r d(e x e 1 为模板,建立名为Mc c D e m o的工程,选择单文档,其它 的接受默认设置。(1)参考本文 2 1 2中的第一步,给 V C工程添加头 文件搜索路径;(2)设置工程选项:进人 P r o j e c t lS e t t i n g s,(a)在 C C+F 性页中,选择 C a t e g o ry为 G e n e r a l,再 在 P r

17、 e p r o c e s s o r d e fi n i t i o n s编 辑 框 中加 入:M S V C I B M P C,M S WI N D(中间有逗号);豢 2 8 篓 囊 翻 l 维普资讯 http:/ (b)在 C C+F性页 中,选择 C a t e g o r y为 P r e c o m-p i l e d H e a d e r s 选择 A u t o m a t i c u s e o f p r e c o m p i l e d h e a d-e r s 再在 T h o u g h t h e a d e r 编辑框中输入 s t d a f x

18、h;(C)在 C C+属 性 页 中,选择 C a t e g o r y为 C o d e G e n e r a t i o n 再 在 U s e mR t i m e l i b r a r y列表 框 中选 择 D e b u g M u h i t h r e a d e d D L L。f 如果把程序编译为 R e l e a s e 版,就选择 M u l t i t h r e a d e d D L L);(d)在 L i n k属性 页中,选择 C a t e g o r y为 I n p u t,再在 0 b j e c t 1 i b r a r y m o d u

19、l e s 编辑框 中加入:l i b m m fi l e 1 i b l i b m a t l b 1 i b l i b m x 1 i b l i b ma t 1 i b l i b ma t p m 1 i b s g 1 1 i b l i b m w s g l m 1 i b。然后在 I n g o r e l i b r a r i e s 编辑框 中输入:m s v c r t 1 i b。f 3 1 编辑 m文件v c m c c m f u n c t i o n v c m c c(n)x=s i n(1:(2 n)l (2 n)(2 0 p i);y=a b s

20、(f f t(x);y=y(1:n);【m,i l=m a x(y);s u b p l o t(2 1 1);p l o t(x);s u b p l o t(2 1 2);p l o t(y);s=s p r i n ff(Ma x=d,I n d e x=d n ,m,i);u i w a i t(m s g b o x(s,结果,n o n m o d a l );c l o s e;在 M a t l a b环境下,进入 v c m c c m文件所在目录,执行命令:m c c B s g l c p p v c m c c m 命令执行完毕,将生成的 s u b p l o t c

21、 p p s u b p l o t h p p v c m c c c p p v c m c c h p p复制到工程 目录。并将 s u b p l o t c p p v c m c c c p p 添加到工程中。(4)打开菜单编辑器,给程序的主菜单加入一个新 菜单 M C C,它有 一 个 子 菜单 D e m o。指 定 其 I D为 MCCDEMO。(5)在工程 中添加一个对话框,并为其创建一个对 话 框 类 C M y D L G。在 对 话 框 中 添加 一 个 编 辑 控 件(I D C E D I T),为I D C E D I T添加一个整形变量 i n t mn,指定

22、该变量的范围(2 0 9 9 9 9)。,(6)为子菜单 M C C D E MO生成消息处理函数(在类 C M a i n F r a m e中实现),并编辑如下:v o i d C M a i n F r a m e:0 n D e m o()l i b m m fi l e l n i t i a l i z e();l i b m w s g l m I n i t i a l i z e O;2 4 电 脑 知识 与 技 术 穗壤l譬 壤蕊 m l f H G I n i t i a l i z e(N U L L,N U L L);My DL G d l g;i f(d i g D

23、 o D e m o()=I D 0 K)i n t n=d l g m n;mw Ar r a y a;a=n;v c m c c(a);l 在源文件f M a i n F m c p p)l J 头部添加包含文件#i n c l u d e“ma fl a b h p p”ma t l a b h p p是 Ma t l a b C+数学库的头文件#i n c l u d e“v c m c c h p p#i n c l u d e“My D L G h”f 7)至此,设置和添加完毕,编译 连接之后,就可以 运行了。此程序利用一个对话框接受一个正整数 n,将 一个波长为 2 0的正弦波信

24、号离散化,并计算其快速 傅立叶变换以及变换后的最大值。2 3利用 m e x 程序 所谓 m e x程序,是 M a t l a b E x e c u t a b l e 程序 的缩写,即M a t l a b可执行程序。它是扩展文件名为D L L的动态 连接库。在 2 1 1 节 中,是将已有的引擎程序编译为 e x e文件,在 Wi n d o w s 环境下双击 即可运行,但不能供 M a t l ab 调用;而本节将要介绍的是将 C应用程序编译 为动态连接库f D E E)文件,这种 D L L文件符合 Ma a b 的调用格式。可以在 M a t l a b的命令窗 口和 m程序

25、中直 接调用。M a t l a b提供 了用于 m e x程序 的 应用 程序 接 口。m e x 程序有 唯一的输 出函数 m e x F u n c t i o n,所有 的输入 变量 和输 出变 量都用 统一的 数据类 型 m x A r r a y来表 达。输入变量 和输 出变量的个 数都 可以在 m e x F u n c t i o n 的参数中表明。在运行 m e x 程序之前,必须在 M a t l ab 中用“m e x s e t u p”命令,对 m e x 程序的编译器选项进行 设置。建立 V C工程时,应选择静态链接 MF C的 D L L,因为M a t l a

26、b 必须使用 自带的 m f c 4 2 d l l。此文件与wi n d o w s 系统 目录中的相应文件不相容。选择 静态链接 MF C可避免出错。此外,需要在 V C的 d e f 文件中指定 D L L文件的输出函数,即在 d e f 文件中的“E x p o r t s”后 加 上”m e x F u n c t i o n”。还 要 把 头 文 件 目 录 c:M a t l a b 6 p 5 e x t e r n i n c l u d e 和 库 文 件 目 录 c:k m a t l ab6 p 5 e x t e mk l i b w i n 3 2 k m i c

27、r o s o fi k ms v c 6 0加入 V C的 搜索路径 中。并指定要链接 的库文件 l i b m x 1 i b l i b m e x 1 i b ma t l b mx 1 i b l i b ma t 1 i b。举一个简单的例子:维普资讯 http:/ 将以下代码以 C P P文件保存,并加入 V C工程。#i n c l u d e“s t d a f x h#i n c l u d e“me x h”v o i d m e x F u n c t i o n(i n t n l h s,m x A r r a y p l h s【,i n t n r h s,c

28、o n s t m x A r r a y p r h s )m e x P r i n t f(“H e l l o Wo r l d!k n”);1 编译和链接后 可在 d e b u g目录下得到相应的 D L L 文件。该文件可在 M a t l a b中直接运行,输出字符串:“He l l o Wo r l d!”。由于 M a t l a b是一种解释执行的脚本语言 其运行 速度通常比较缓慢。而 m e x 程序是用 C C+语言编写 的可执行程序,克服 了脚本语 言速度缓慢的缺点,提 高了程序执行的效率。前面提到的M a t l a b编译器m c c 虽然能将 n l 文件转换

29、 为 C C+文件,但 实际上 n e e是 将 i n文件生硬地直接 翻译成 C C+程序。这样翻译得 到的程序通 常包含大量的标准 函数,在某些情况下执 行效率并不很高,甚 至比原来的 m 文件还慢。因此,编 写 m e x程序才是提 高 M a t l a b程序运 行速度 的最有效 的方法。2 4利用 M a t c o m编译 M a t l a b自带的 m c c编译器存在很多不便,M a t h T o o l s 公 司推出的 M a t c o m是一个 十分有效 的 m 文件 翻译器,它具有 以下优点:(1)M a t c o m提供 了 M a t l a b中 n l

30、 文件 与其他高级 语言的接 口,能够将 n l 文件编译为脱离 M a t l a b环境 独立运行的可执行性程序,这样既提高了代码的复用 率,又提高了代码的执行速度。(2)它提供 了近千个数学函数。对于其他高级语言 编译器来说,提供了一个丰富的数学函数库 基本上在 M a fl a b 上的常用函数都可以在高级语言中直接调用。(3)M a t c o m不仅将 Ma t l a b中的 n l 文件编译为脱 离 M a fl a b 环境独立运行的可执行性程序。还能够将其 翻译成相应 的 c p p文件,用户则可选择其中的部 分 代码直接插入到 V C+开发的程序中。M a t c o m

31、同时还 克服了m c c只能编译一个独立的 n l 文件的缺点,当 所编译的 n l 文件依赖于其他的 m 文件(在 Ma d a b 中称为函数)时,M a t c o m能够将 该 m文件 中所调用 的其他的 1 3 1 文件直接编译成 d U,同时给出相应的 c p p和 h文件,条件是被调用的 I n文件与编译的 i n文件在同一个 目录下。编译后用户可 以将 c p p 和 h文件插入到 v C+开发的工程中,像调用函数一 样调用,也可以将生成的 d U像使甩其他动态链接库 一样使用。f 4)M a t c o m支持一定的图形显示。由以上 4个优点不难想象,M a t c o m将

32、是 M a t l a b和 v C+甚至其他高级语言之间进行混合编程的完美解 决途径。对 M a t c o m来说,其工作过程是先将 i n 文件 按照与 M a t c o m的c p p库的对应关系翻译为 c p p源代 码,然后用对应版本的 C 编译器将 c p p文件编译成相 应的 e x e 或 d U文件。3结论 M a t l a b和v C+的4种混合编程方法。利用 M a t l a b 引擎可节省大量的系统资源,应用程序整体性能较 好,能最充分地利用 Ma fl a b的功能,但不可脱 离 M a t l a b的环境运行,且运行速度较慢,但在一些 特别的应 用(例如需

33、要进行三维图形显示)时可以考虑使用。用 M a t l a b自带 的 m c c编译器将 相应的-m文件转换 为 c p p 代码,转换的代码可读性不太好 且不支持图形函 数,不常使用,但该方法是 M a t l a b自身提供的。编写 m e x程序可在 M a t l a b中实现对 V C代码的调用。当程 序有多个模块时,需要多次使用 m e x 命令,操作很麻 烦。用 M a t c o m进行转换非常简单、方便,生成的代码 可读性很好。且在 C编译器编译后其代码的执行的速 度 比 M a t l a b下平均要快 1 5倍以上 可 以认为是 Ma t l a b和V C+进行混合编

34、程最为有效的途径。参考文献【1 刘志俭,潘献飞,连军想 M a t l a b外部程序接口 (6 x)【M 北京:科学出版社,2 0 0 2 【2 尹泽明,丁春利 精通M A T L A B 6 M 北京:清华大 学出版社 2 0 0 2 【3 郭虹,薄云飞,林冬 V C+与M A T L A B混合编程 技术研究 J 计算机工程,2 0 0 2,9:2 6 9 2 7 1 【4】林岚,周云波,杨玉星,等 Ma t c o m:M a t l a b与 C+结合的有效途径【J 微机处理,1 9 9 9,5(2):5 0 5 1 【5 闻斌,崔建昆 M A T L A B与 V i s u a l C+的联合应 用【J 计算机与现代化,2 0 0 4,2:1 4 1 6 【6 何强,何英 M a fl a b扩展编程【M 北京:清华大学 出版社 2 0 0 2 电脑知识与技术 0 冀溪一 维普资讯 http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com