VC_与MATLAB混合程序设计与应用
MATLAB与VC++混合编程的研究及应用

MATLAB与VC++混合编程的研究及应用摘要:介绍了三种实用易行的matlab与vc++混合编程方式,即利用matlab的mcc编译器,使用matcom软件转化m文件,使用matlab的com builder工具制作com组件。
针对具体程序分别应用三种方法来实现,对每种方法介绍了详细步骤。
对三种方法进行了分析比较,总结了各自的优缺点,实现了matlab出色的图形处理功能和数值计算能力与vc++强大编程能力的结合。
关键词:matlab;vc++;混合编程中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)10-2353-03matlab是适合多学科,多种工作平台的功能强大的大型数值计算和系统分析软件。
matlab将数值分析、矩阵计算、信号处理和图形显示相结合,包含了大量高度集成的函数,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具,在数值分析、科学计算、算法开发、建模和仿真等方面具有独特优势[1]。
但是matlab使用的是解释性语言,限制了自身的执行速度;程序的执行限制与matlab自身的运行环境,不利于应用程序的开发;gui功能较差。
vc++是强大的windows应用程序开发工具,它提供了高度集成的工具集和可视化集成的编程环境,包括了microsoft的代码优化技术,极大提高了应用程序的设计效率,还提供了复杂的资源编辑器,拥有强大的gui功能[2]。
因此,实现matlab与vc++等可视化程序设计语言的混合编程,提高程序的执行速度,美化应用程序界面,脱离matlab环境,发布独立的应用程序,同时利用matlab在数值分析、矩阵计算、信号处理和图形显示等方面的强大功能,具有重要的意义。
1 matlab与vc++混合编程方法matlab与vc++有多种接口方法,但是一些常见方法难以实现,执行效率低,如matlab engine、直接调用matlab的c/c++数学函数库等。
VC和MATLAB混合编程方法在迷彩斑块设计中的应用

i t .Th ma eP o esn ob xi ald B sn eI g r cs igTo lo c l yu igMATLAB fn t n nod rt raeC(M tra e.VC十 十 c l h s e u ci si r e oce t ) i efc s o n al t e s
i t ra e ,a l a r c s e h e u n n e u t tr a i h r c s ig o h n u a k r u d i g b an t e b u d n e f c s swel sp o e s st er t r i g r s l .I e l e t ep o e sn f e i p t c g o n z t b ma eo t i o n — h
关键词 MAT I AB; + + ;边缘 提取 ; O VC C M
T 3 1 5 P 1.6 中 图分 类 号
Ap lc to f VC n ATLAB n D e ni m o l g p t p ia in o a dM i s g ng Ca i ufa e S o s
白万 民 闰 飞 喻 钧
西 安 70 3 ) 1 0 2 ( 西安 工 业 大 学 计 算 机 科 学 与 工程 学 院
摘
要
通过一个迷彩斑块设计 实例 , 阐述 VC和 MAT I AB的混合编程 方法在迷 彩设计 中的应用 。使用 MAT A L B
函数 调用 图像处理工具箱 , 创建 C OM 接 口, 从而实现 VC ++调用该 C M 接 口 , O 并对返 回结果进 行处理 。实现对输入的背 景图像进行处理 , 获得 图像 的边缘轮廓 , 为迷彩的斑块设计提供 依据 。既能充分利用成熟 的函数库加快软件开发 , 成功提取 到背景 的较闭合边缘 , 又能保证 良好的用户界面及性能 。
matlab程序设计与应用

matlab程序设计与应用Matlab是一款高效能的编程语言,具有高品质的计算和分析功能,近十多年来被广泛应用在工程计算、科学研究、商业分析、金融模拟和教育工作等多个领域。
它拥有一系列强大的算法编写功能,可以实现非线性矩阵求解、信号处理、图像处理、生物医学信号处理等功能。
本文将介绍Matlab程序设计与应用,以及它在工程计算、科学研究、商业分析等领域的应用和示例。
一、Matlab程序设计Matlab是一种操作方便的高级编程语言,立足于原始编码,它建立在C及FORTRAN之上,而且它的高级结构使得设计程序不必写成复杂的程序框架,而可以把主要精力放在要实现的功能上。
Matlab在程序设计方面支持面向对象编程(Object-oriented programming,OOP)方式,可以实现结构化的程序设计,把大量的程序按照模块和函数来管理,方便调用和重用,并可以利用Matlab的类和类的方法来实现程序的重用和拓展。
二、Matlab在工程计算领域的应用Matlab在工程计算领域的应用如下:(1)Matlab可以用于科学计算,如:数值分析、科学计算、多元函数拟合、图像处理以及信号处理等。
(2)Matlab可以用于设计和调试电子电路,如:数字电路、模拟电路、射频电路、功率电路以及控制电路等。
(3)Matlab可以用于控制系统分析,如:数模转换、频响函数以及过程控制等。
(4)Matlab可以用于机械结构设计,如:机械结构分析、运动学以及动力学等。
三、Matlab在科学研究和商业分析领域的应用Matlab在科学研究和商业分析领域的应用如下:(1)Matlab可以用于统计学研究,如:概率统计、偏差分析、多元分析以及非参数分析等。
(2)Matlab可以用于数据挖掘,如:决策树分类、聚类分析以及因子分析等。
(3)Matlab可以用于仿真研究,如:求解方程、模拟实验以及模型预测等。
(4)Matlab可以用于商业分析,如:市场调研、销售预测以及风险评估等。
基于VC ++与MATLAB混合程序设计与应用

第2 9卷 第 4期
20 0 8年 8月
河 南 科 技 大 学 学 报 :自 然 科 学 版
J u n l fHe a ie st fS in e a d T c n lg Nau a c e c o r a n n Un v ri o c e c n e h oo y: tr lS i n e o y
( 南 科 技 大 学 a建 筑 - 程 学 院 ; . 电 工 程 学 院 , 南 洛 阳 4 10 ) 河 . r - b机 河 70 3
摘要: 针对 V 一 与 MA L B软件各 自编程优 势 , 出了一 种将 MA L B中编译 的 . C TA 提 TA m函数文件 生成可 脱离
MA L B环 境 的 动 态 连 接 库 ( L ) 并 以 具 体 实 例 说 明 了在 V TA DL , C环 境 中开 发 应 用 程 序 界 面 并 调 用 动 态 链 接 库 , VC界 面和 MA L B编 译 的 函数 文 件 之 间 的参 数 得 以传 递 , 现 了 两者 的 混 合 编 程 , 使 TA 实 为软 件开 发提 供 了 强有 力的技术支持 。
件 开 发效 率 , 使开 发 的软件具 有 更高 睁 眭能 , 广 阔的应用 领 域 。 更
1 V 和 MA L B混 合 编 程 实 现 的方 法 C TA
V C和 MA L B的结合 方法 有多 种 , TA 但其 使 用 的程度 与 范 围不 同。 常用 的方 法 有 6种 日-] ( ) c 5: 1 v 利 用 MA L T AB引擎 ( nie 调用 MA L B函数 ; 2 将 MA L B程序 编译 成 Vc文 件并 嵌 入 V ( ) Eg ) n TA () TA c; 3 使 用 ma o 工具将 . 函数 文件 转化 成相 同功能 的 c一 文件并 嵌 入 V ( ) 用 MA L B在 V tm c m c;4 使 TA c中 的 A d—i 件 , MA L B文件 导 入 V d n插 将 TA C环境 中 ; 5 使用 MA L B提供 的 c接 口函数库 或 c一 接 口函 () TA 数 库 直接 在 V 中 编程 ; 6 利 用 MA L B C MPL R( 译 器 ) 将 MA L B 的 函 数 编 译 成 可 脱 离 c () T A O IE 编 , TA
VC与Matlab混合编程

VC与Matlab混合编程本⽂主要介绍VC与Matlab混合编程的两种⽅法,并详细介绍了VC向Matlab传递复杂数据:结构体的⽅法,有详细代码说明。
Matlab 主要⾯对科学计算、可视化以及交互式程序设计的⾼科技计算环境,但由于Matlab开发平台上开发的程序不能脱离Matlab运⾏环境,因⽽在处理⼀些实际应⽤问题时显得灵活性不⾜,⽽VC++则在⼀定程度上能够弥补这⼀漏洞,因此,将⼆者结合共⽤,各献其长,可以为科研⼯作和⼯程开发提供更为强⼤的技术⽀持。
Matlab作为控制系统设计的⼀种通⽤⼯具,它可以很⽅便的和VC进⾏连接。
⼀般⽽⾔,Matlab与VC混合编程的实现⽅法有很多种,这⾥主要介绍以下两种:1. VC调⽤Matlab Engine的⽅式:Matlab Engine是⼀组Matlab提供的接⼝函数,⽀持C/C++语⾔,Matlab Engine采⽤C/S(客户机/服务器)模式,Matlab作为后台服务器,⽽C/C++程序作为前台客户机,向Matlab Engine传递执⾏命令和数据信息,从Matlab Engine接收执⾏结果。
⽤户可以在前台应⽤程序中调⽤这些接⼝函数,实现对Matlab Engine的控制。
采⽤这种⽅法⼏乎能利⽤Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执⾏效率较低。
下⾯简单介绍下这种⽅式的实现步骤:1.1 API接⼝介绍先来介绍⼀组Matlab提供的引擎API接⼝:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)Engine* engOpen(const char* startcmd)启动Matlab引擎int engClose(Engine* ep) 关闭Matlab引擎int engEvalString(Engine* ep, const char* string)执⾏Matlab表达式mxArray* engGetArray(Engine* ep, const char* name)获取⼀个变量数组的值int engPutArray(engine* ep, const mxArray* mp)设置⼀个变量数组的值int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上mxArray *engGetVariable(Engine *ep, const char *name)获取⼀个变量int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串1.2 VC环境配置要想在VC集成环境下调⽤Matlab引擎实现VC和Matlab的混合编程,⼀般需要经过以下⼏个必要的步骤:(以下以Matlab2008a和VS2005版本为例)(1)添加include路径:将“\extern\include”(在Matlab的安装路径下)路劲添加到VC编译器的include下(2)添加lib路径:将“\extern \lib\win32\microsoft” (在Matlab的安装路径下) 路径添加到VC编译器的lib下(3)加载lib:需要加载⾄少libmx.lib、libmat.lib、libeng.lib三个库(4)include头⽂件:在要使⽤ engine 函数的地⽅包含engine.h头⽂件1.3 引擎调⽤接下来就可以在VC中调⽤Matlab引擎了,简单的⽰例代码如下:#include "engine.h"#pragma comment(lib, "libeng.lib")#pragma comment(lib, "libmx.lib")#pragma comment(lib, "libmat.lib")void TestDeno(){Engine* pEng = NULL;if (!(pEng = engOpen(NULL))){printf("Open matlab enging fail!");return;}//call Engine plot A*sin(t)+B A=2 B=1mxArray *A = NULL;double init = 2;A = mxCreateDoubleMatrix(1, 1, mxREAL);memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "A", A);init = 1;memcpy((void*) mxGetPr(A), (void*)&init, sizeof (double));engPutVariable(pEng, "B", A);mxDestroyArray(A);Sleep(3*60*1000);engEvalString(pEng, "t=0:0.2:7;plot(t,A*sin(t)+B);");if(NULL != pEng){engClose(pEng);}}⽰例代码通过VC调⽤Matlab引擎,绘制正弦曲线,相对简单,就不再详细解释,效图如下:2. VC调⽤Matlab DLL的⽅式DLL是⼀个可执⾏的⼆进制⽂件。
Matlab与C混合编程的方法研究与实现毕业论文

Matlab与C混合编程的方法研究与实现摘要:文章探讨了MATLAB与VC++的优缺点,介绍了VC++与Matlab混合编程的几种方法。
通过二者的结合,既有效地利用了MATLAB强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了VC++良好的程序界面,证明是一种很好的程序设计方法。
具体说明了如何应用Matlab引擎实现混合编程以及如何利用MATCOM进行MATLAB和VC++混合编程,并将两种方法用于数字图像处理。
关键词:MATLAB;VC++;MATCOM;引擎;混合编程;图像处理一、引言1、数字图像处理简介:图像技术由高到低分为三个层次:图像处理、图像分析和图像理解。
图像处理是比较底层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。
数字图像处理最基本的目的就是改善图像,主要是按需要进行适当的变换突出某些有用的信息,去除或消弱无用的信息,如改变图像的对比度,去除噪声或强调边缘的处理等,其基本方法有:直方图修正、灰度变换、图像的频域特性、图像平滑、图像锐化等。
直方图是图像的重要统计特征,是表示数字图像中每一灰度级与该灰度级出现的频率数间的统计关系。
直方图能给出该图像的大致描述,如灰度范围、灰度级的分布、整幅图像的平均亮度等,但它不能完整地描述一幅图像。
通常用横坐标表示灰度级,纵坐标表示频数。
通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,我们可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均匀化,从而增加反差,使图像的细节清晰,达到图像增强的目的。
灰度变换是图像增强的一种重要手段,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。
灰度变换可分为线性、分段线性、非线性以及其他的灰度变换。
线性灰度变换实际上使曝光不充分的图像中黑的部分更黑,白的部分更白,从而提高对比度。
图像中的边缘或者线条部分与图像频谱中的高频成分相对应,因此采用高通滤波的方法让高频分量顺利通过,使低频分量受到抑制,就可以增强高频的成分,使图像的边缘或者线条变得清晰,实现图像的锐化。
Visual-C#与Matlab混合编程示例(含代码)
Visual C# 与Matlab 混合编程由于Visual C# 与Matlab 混合编程的资料并不多,本文通过一个实例来阐述Visual C# 与Matlab 混合编程的方法。
一、混合编程的 4 种方式1. 通过从Matlab的*m文件中生成C语言版本的DLL1) 在Matlab中写好m文件;2) 使用Matlab的编译器,编译为C#能识别的DLL文件;3) 建立C#工程,在工程中引用上一步生成的文件;2. C#调用Matlab工作区计算并返回结果主要使用engOpen, engClose, engPutVariable, engEvalString, engGetVariable 函数进行操作。
大致过程如下:MatlabCSharp.engPutVariable(ep, "ml_a", mx_a);MatlabCSharp.engPutVariable(ep, "ml_b", mx_b);MatlabCSharp.engEvalString( ep, "ml_c = ml_a + ml_b ;" ); mx_c = MatlabCSharp.engGetVariable(ep, "ml_c" );3. 使用Matlab DeployTool 生成COM 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> Generic COM Component2) 添加相应的M 文件3) 保存,编译4) 新建C#工程,引用生成的DLL文件。
4. 使用Matlab DeployTool 生成.Net 组件1) 单击菜单New Deployment Project -> MATLAB Builder NE -> .Net Component2) 添加相应的M 文件3) 保存,编译4) 新建C# 工程,引用生成的DLL 文件。
MATLAB与VC混合编程及应用研究
Ab ta t Th s p p r i t o u e h a l g m e h d a d t e a p ia i n o h ATLAB a d V C c mb n d sr c : i a e n r d c s t e c l n t o n h p l t ft e M i c o n o i e
( . De a t e to n o ma in Teh oo y C a g h u Te tl r e tI siu e Ch n z o 1 1 4 1 p rm n fI f r to c n lg , h n z o x i Gam n n tt t , e a g h u2 3 6 ,
M ATL AB al g VC r g a : c l n h e ae u ci ns se (FS yVC f r a , d a n h f cln i p o rm al gt ei rt df n t y t m I )b o m t rwi gt ea— i t o fn r n f r ain o r ca n ep lt d f n t n ( F) g a h b s d O ATLAB ln u g . I fe s ie ta so m to ffa t litr oa e u ci o FI rp a e n M a g a e to fr
1 0 m x e de e m e f Ni gb ipo t hi hwa 0 e t n d s g nt o n o ar r g y,i o i r he c m bi d pr gr m mi e ho y t c nsde s t o ne o a ng m t d b
文章 编号 :l 7 — 9 2 ( 0 8 2 o 2 3 6 3 6 0 2 0 )O —0 4 一O
VisualStudio与Matlab实现混合编程
VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的C应⽤程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使⽤mbuild命令可以直接将C/C++源代码编译为独⽴运⾏程序,在这些源代码中可以使⽤Matlab提供的接⼝来调⽤Matlab数学库函数。
虽然⽣成的可执⾏程序可以脱离Matlab环境运⾏,但是它需要Matlab C/C++数学库⽂件或者图形库⽂件的⽀持才能运⾏。
但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调⽤,则不仅可以独⽴与Matlab环境,也不需要那两个库函数的⽀持。
在 Matlab 的Command Window 下输⼊命令。
mbuild – setup操作过程如下图:然后输⼊命令mex – setup以类似的⽅法配置编译器。
Matlab 的配置完成。
2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。
使用VC调用matlab_engine编程
关于如何使用VC调用matlab engine编程刚开始学使用VC调用matlab engine编程的时候,遇到很多问题,就去百度找解决方法,但发现根本解决不了我的问题,因为网上大部分实例和步骤都是在matlab6.5和vc++6.0环境下完成的,但是现在我用的是matlab2010a,所以会出现很多环境配置的问题,写本文的目的是总结用我在用VC调用matlab engine编程过程中出现的问题和解决办法。
Matlab Engine 采用Client/Server的方式,通过ActivcX通道和Matlab接口来实现在VC编程环境中直接调用matlab中的指令。
调用使用的函数是:engEvalSting。
下面是自己的实践过程:如果是第一次使用,则要设置一下Visual C++6.0 编程环境中的include 和lib的路径指向。
我的matlab2010安装在D盘目录D:\MATLAB 2010一、设置VC相关属性。
(1)Visual C++6.0 编译环境的设置:通过菜单 Tools/ Options,打开Visual C++6.0设置属性页,进入 Directorie页面,在 Show Directories for 下拉列表中选择Include Files,添加路径:D:\MATLAB 2010\extern\include (这是我电脑中Matlab的安装路径);再选择下拉列表中的 Library Files,添加路径:D:\MATLAB 2010\extern\lib\win32\microsoft(我电脑中Matlab 的安装路径,但是在我查看资料的时候看到很多是D:\MATLAB2010\extern\lib\win32\microsoft\msvc60这个路径,但是我用的是MatlabR2010a,msvc60是matlab6.5老版本才有的,10.0版本没有这个文件,所以我们把路径设到D:\MATLAB 2010\extern\lib\win32\microsoft 就可以了)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文献标识码 : A
0 前言
V isual C + + ( 以下简称 VC)是 M icrosoft公司推出的强大的可视化集成编程环境 , 使用 VC开发的 系统具有界面友好 、代码效率高和执行速度快等一系列优点 。同时 VC语言支持面向对象的程序设计 , 用 VC编制的用户界面元素丰富而且可以定制 ,能够保证复杂界面的执行速度 [ 1 - 2 ] 。然而 VC只提供了 一些基本的数学函数库 ,当遇到复杂的数值运算时 ,通过编程人员实现代码 ,将大大延长软件的开发周 期 ,增加软件开发成本 ,影响软件的性能 。
© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
第 4期
李云龙等 :基于 VC + +与 MATLAB 混合程序设计与应用
·51·
做出相应的配置 。做法如下 :在 MATLAB 环境中运行 mbuild2setup 命令和 mex2setup 命令 ,按屏幕提示 选择有关选项 ,并按实际路径情况选择编译器 [ 6 ] 。 2. 2 VC 编译环境设置
基于 VC + + 与 MATLAB 混合程序设计与应用
李云龙 a ,唐六丁 a ,邓四二 b ,韩宝财 b
(河南科技大学 a. 建筑工程学院 ; b. 机电工程学院 ,河南 洛阳 471003)
摘要 :针对 VC + +与 MATLAB 软件各自编程优势 ,提出了一种将 MATLAB 中编译的. m 函数文件生成可脱离
钮执行并输出图来 ,这里并不讨论如何画图 ,只讨论如何用 VC + +环境开发应用程序调用. m 文件编译 后的动态连接库 ,以及 VC界面和 MATLAB 编译的函数文件之间的参数传递问题 ,以实现二者的有效结 合。
把编译生成的 mylib. h. mylib. libm ylib. dll和 < MATLAB > \ extern \ lib \w in32 下的 libmatpm. lib, <MATLAB > \ extern \ lib \w in32 \m icrosof \m svc6下的所有 3 . lib文件复制到 VC + + 工程文件下 ,并且用 add files to p ro ject…添加的工程中 。 [ 8 ]
(3)选择 Project菜单下的 Setting…项 ,选择 L ink项 ,在 Categories中选择 Input, 在 Ignore libraries: 中填加 : m svcrt. lib。在出现的 Object/L ibraryModules中添加库文件名 : libmmfile. L ib ibm atlb. lib libmx. L ib ibmatpm. lib。每个新的工程文件都要单独添加库文件 [ 6 ] 。
2 通过 VC 与 MATLAB 编译器实现互连的具体方法
2. 1 MATLAB 编译环境设置 为了能够使用 MATLAB 的编译器将. m 函数文件编译为动态链接库 DLL ,必须对 MATLAB 的环境
基金项目 : 国家“十一五 ”重大科技攻关项目 (JPPT - 115 - 189) 作者简介 :李云龙 (1980 - ) ,男 ,河南洛阳人 ,硕士生 ;唐六丁 (1947 - ) ,男 ,江苏常州人 ,教授 ,主要研究领域为非线性振动. 收稿日期 : 2007 - 11 - 16
(1)选择 Tools菜单下的 Op tions…项 ,选择 D irectories,在 Show directoris for列表框中 ,将 MATLAB 安装路径和库文件路径添加到 VC路径中 ,这些操作只需要一次 , VC就会自动记录 ,应用到每一个工 程;
(2)选择 Project菜单下的 Setting…项 ,选择 C /C + + ,首先在 Category栏中选择 Code Generation,在 U se run2time library 中 选 择 M ultithreaded DLL。然 后 在 Category 中 选 择 Precomp iled Headers, 选 择 Automatic use of p recomp iled headers,并且在 Through header下面添加 stdafx. h。随后在 Category中选择 Prep rocessor, 在 p rep rocessor definitions中添加 M SVC,M SW IND , IBM PC;
© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved.
·52·
河 南 科 技 大 学 学 报 : 自 然 科 学 版 2008年
void CD ialogD lg: : Onok ( ) {… m ylib Initialize ( ) ; / /注册动态链接库 double xigma, b, r; / /取 VC输入参数
xigma =m _xigma; b =m _b; r =m _r; m xA rray 3 x; mxA rray 3 y; mxA rray 3 z; / /创建 mxA rray型数据并对其赋值 x =mxCreateDoubleM atrix (1, 1, mxREAL ) ; / /调用 MATLAB 库函数 y =mxCreateDoubleM atrix (1, 1, mxREAL ) ; z =mxC reateDoubleM atrix (1, 1, mxREAL ) ; m emcpy (mxGetPr( x) , &xigm a, sizeof ( double) ) ; / /调用 MATLAB 库函数 m emcpy (mxGetPr( y) , &b, sizeof ( double) ) ; m emcpy (mxGetPr( z) , &r, sizeof ( double) ) ; m lfLorenz ( x, y, z) ; / /调用动态链接库中封装函数 m xDestroyA rray ( x) ; / /销毁 x,释放内存 m xDestroyA rray ( y) ; / /销毁 y,释放内存 m xDestroyA rray ( z) ; / /销毁 z,释放内存 m ylibTerm inate ( ) ; / /注销动态链接库 …
MATLAB环境的动态连接库 (DLL ) ,并以具体实例说明了在 VC环境中开发应用程序界面并调用动态链接
库 ,使 VC界面和 MATLAB编译的函数文件之间的参数得以传递 ,实现了两者的混合编程 ,为软件开发提供了
强有力的技术支持 。
关键词 :动态链接库 ;参数传递 ;混合编程
中图分类号 : TP311
3 VC 与 MATLAB 混合编程应用
3. 1 将. m 函数文件编译成动态链接库 为说明问题 ,举一个 VC和 MATLAB 混合编程绘制 Lorenz (洛仑滋 )方程相轨迹图的例子 ,此例旨在
说明如何在 MATLAB 中生成动态接库 。首先在 MATLAB 环境下编写函数文件 Lorenzp. m 和 Lorenz. m , 其程序代码如下 :
然后 ,在工程的源文件中引入 mylib. h头文件 ,这样就可以在集成开发环境中使用. m 文件提供的 功能 。 3. 3 调用动态链接库中封装的函数
动态链接库中封装的函数都是以 m lf开头 ,数据类型都是 mxA rray。mxA rray是 MATLAB 的 AP I中 的一种数据类型 ,所有的 DLL 函数都必须以这种数据类型为数据接口 [7 ] ,利用 C lass W izard为绘图按钮 生成消息处理函数 ,绘图按钮消息处理函数部分程序代码如下 :
第 29卷 第 4期 2008年 8月
河南科技大学学报 :自然科学版 Journal of Henan University of Science and Technology: Natural Science
ቤተ መጻሕፍቲ ባይዱ
Vol. 29 No. 4 Aug. 2008
文章编号 : 1672 - 6871 (2008) 04 - 0050 - 04
1 VC 和 MATLAB 混合编程实现的方法
VC和 MATLAB 的结合方法有多种 ,但其使用的程度与范围不同 。常用的方法有 6种 [ 3 - 5 ] : ( 1) VC 利用 MATLAB 引擎 ( Engine)调用 MATLAB 函数 ; ( 2)将 MATLAB 程序编译成 VC文件并嵌入 VC; ( 3) 使用 m atcom 工具将. m 函数文件转化成相同功能的 C + +文件并嵌入 VC; (4)使用 MATLAB 在 VC中的 Add - in插件 ,将 MATLAB 文件导入 VC环境中 ; (5)使用 MATLAB 提供的 C接口函数库或 C + +接口函 数库直接在 VC 中编程 ; ( 6 ) 利用 MATLAB COM P ILER (编译器 ) ,将 MATLAB 的函数编译成可脱离 MATLAB 环境的动态链接库 (DLL ) , 然后在 VC中调用 。其中前两种方法必须在安装了 MATLAB 的系 统上运行 ,在实际开发中很少采用 ,本文采用第 6种方法 ,该方法生成的应用软件对 MATLAB 没有依赖 性 ,可以与之独立而运行 。
MATLAB 是 MathWorks公司推出的一套高性能的数值计算和可视化软件 ,它集数值分析 、矩阵运 算 、信号处理和图形显示于一体 ,构成了一个方便 、界面友好的用户环境 。然而 MATLAB 自身所存在的 某些缺点限制了它的应用范围 ,由于 MATLAB 是一种解释性语言 ,因此它的执行效率是比较低的 , MATLAB程序不能脱离其环境运行 ,因此它不能被用于开发商用软件 ,而 VC强大的可视化编程功能则 可以弥补这一缺陷 ,在 VC软件中开发复杂的用户界面 、数据采集和管理程序 ,对于数据的处理则希望 通过稳定的 MATLAB 程序来实现 ,通过 VC和 MATLAB 的混合编程 ,必将充分发挥各自的优势 ,提高软 件开发效率 ,使开发的软件具有更高的性能 ,更广阔的应用领域 。