Matlab引擎的VC++6.0接口调用及其面向对象编程
- 格式:pdf
- 大小:231.39 KB
- 文档页数:6
matlab7.0.1与vc6.0混合编程之DLL默认分类2009-10-24 20:35:53 阅读594 评论0字号:大中小matlab7.0.1与vc6.0混合编程成功matlab2008-01-05 18:11 阅读600 评论0字号:大大中中小小混合编程其实不难,关键是没有一个规范的,真正可以解决设置过程中出现的小问题的方法。
我在设置的过程中,遇到了不少问题,花了多半天的时间,终于解决了,顺利地在vc中调用matlab 生成的dll文件中的函数,并返回一个值,探出对话框,显示正确。
这种混合编程的方式不能脱离matlab环境,如果需要发布独立的应用程序,需要安装MCR。
下面分步骤地讲一下混合编程的设置及其原因:1 matlab方面的操作首先先写一个算阶乘的函数,存成test1.m文件,该文件的内容是:function y = test1(n)y = 1 ;for i = 1 : ny = y * i ;end现在有了文件,下一步我们要设置好系统,设置好matlab,然后再把该文件编译成dll 文件。
1、在环境变量(我的电脑右键-高级)path中加入<MATLAB71_root>\bin\win32;2、添加环境变量matlab值设为< MATLAB71_root >即matlab7.1的安装路径;3、配置mbuild使用的C/C++编译器;在Matlab命令窗口中输入:mbuild -setup按照提示选择VC6.0的编译器,完成后在Matlab命令窗口中输入:mex -setup同样选择VC6.0的编译器,就完成编译器的安装和配置。
接下来我们要把.m文件存储的程序编译成dll文件,在matlab命令窗口中输入:mcc -W lib:test1 -T link:lib test1.m这个需要等一小段时间,最终,在当前目录下生成了到此,在操作系统和matlab这一方面的工作就做完了2 vc++6.0中的操作在vc中建立一个MFC AppWizard[exe]基本对话框工程,名字叫做test1app.1 )在VC 中创建一个MFC 工程(本人创建的为基于对话框的),环境设置根据如下帖子:怎样设置Visual Studio 与Matlb Complier 4.0 一起工作中的指导进行。
关于如何使用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 就可以了)。
VC6.0调用MATLAB生成的COM组件作者:彭军邮件:poonjun at gmail com 博客:/pengjun一、在MA TLAB中安装mbuild首先声明我的MA TLAB版本是2008A(相当于7.5版本),不过幸好版本如何改变,安装mbuild的命令没有变化,下面是安装mbuild的全过程:>> mbuild -setupPlease choose your compiler for building standalone MA TLAB applications:Would you like mbuild to locate installed compilers [y]/n? ySelect a compiler:[1] Lcc-win32 C 2.4.1 in D:\MATLAB~1\sys\lcc[2] Microsoft Visual C++ 6.0 in C:\Program Files\Microsoft Visual Studio[0] NoneCompiler: 2Please verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct [y]/n? yTrying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2008a\compopts.batFrom template: D:\MATLAB~1\bin\win32\mbuildopts\msvc60compp.batDone . . .可以看到我的mbuild已经安装完成了,要注意的是mbuild和-setup之间是有一个空格的,不能连在一起。
第33卷 第4期 成都理工大学学报(自然科学版) Vol.33No.4 2006年8月JOURNAL OF CHEN G DU UNIV ERSITY OF TECHNOLO GY (Science &Technology Edition )Aug.2006 [文章编号]167129727(2006)0420421206利用MAT LAB 和VC ++6.0混合编程技术研究元胞自动机动态演化过程[收稿日期]2005209205[基金项目]成都理工大学青年科学基金资助项目(2004QJ 17);总装试验技术研究项目(200321164)[作者简介]王茂芝(1974-),男,硕士,副教授,主要从事网络协议、计算智能技术和小波分析技术及其应用的研究工作.(E 2mail :wangmz @ )王茂芝1 郭 科1 徐文皙1 佘春东2 汪红兵2(1.成都理工大学信息管理学院信息与计算科学系,成都610059;2.中国科学院软件研究所,北京100080)[摘要]在论述MA TL AB 和VC ++6.0混合编程的基础上,以二维方格元胞自动机的动态演化过程为背景,对不同边界条件和邻居条件的二维方格元胞自动机在奇偶演化规则下的动态行为进行分析,并通过混合编程技术对其动态演化过程进行“可视化”再现和跟踪,得到了元胞自动机在不同条件下其演化过程具有复杂性、不确定性、平衡性、周期性以及分形性等特性的结论,为进一步发掘和揭示元胞自动机的演化规律提供了研究思路和方法。
[关键词]混合编程;动态链接库;元胞自动机;邻居条件;边界条件[分类号]TP391 [文献标识码]A MA TL AB 是一种基于C 语言内核与矩阵运算的工程计算语言,具有强大的数值计算能力和图形处理能力,是解决工程问题的必备工具。
但由于它是一种解释性语言,从而导致它的执行效率比较低;并且在处理实际的应用问题时,灵活性不够,不能与底层硬件直接交互。
VC 是Win 2dows 平台下主要的应用程序开发环境之一,基于它可以开发Windows 应用的所有软件。
Matlab程序在VC中的调用摘要:利用vc与matlab接口技术,用VC 调用Matlab 编译的DLL 文件进行复杂数据处理不仅简洁通用,更具有很强的实用性和可扩展性,在科学计算与工程运用领域具有广泛的推广应用价值。
关键词:MATLAB ;VC;DLL ;接口1. VC与MATLAB简介VC 是大家都非常熟悉的一个软件,它是MicroSoft公司开发的在Windows 环境下主要软件开发环境之一,用其中的MFC 可以快速方便地编写出各种友好的用户界面,且用VC ++ 开发的系统具有容易维护升级、界面友好,代码效率高、执行速度快等一系列优点,因此已成为目前应用软件开发中的主流工具之一。
①、MATLAB是Mathworks 公司开发出的一款著名软件,如今已成为世界上使用最广泛的数学软件,它具有强大的数值计算、数据处理、图象显示、符号运算、系统分析、模拟仿真功能,由于受到各个领域专家学者的青睐,在他们的共同努力下,经过多年的发展,如今的Matlab 不仅拥有功能完善的内部函数库,更有专用于各领域的强大工具包,在这个平台上只需寥寥数语便可完成在其它环境中复杂度不可想象的功能;另外,开放性也是Matlab 一个最重要、最受欢迎的特点,除内部函数外,所有Matlab 工具包中主包文件和各工具包文件都是可读可改的源文件,用户可通过对源文件的修改来形成新的工具包,甚至亦可完全由自己编写源文件来构筑自己研究领域的专用工具包。
在欧美发达国家中,Matlab 已经成为应用线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能;在设计研究单位和工业部门,Matlab 也被广泛地用于研究和解决各种具体工程问题。
Matlab在中国得到充分的重视,在各科研机构和高校中得到大量的使用。
2 利用VC 与MATLAB接口实现matlab程序在VC中的调用(1) 在Matlab 环境中编写. m 文件。
VC++6.0与MATLAB R2010a混合编程实例VC中调用MATLAB编译生成的动态链接库方法软件:MATLAB 7.10(R2010a),VC++6.0系统环境变量:在我的电脑—属性—高级—环境变量—系统变量—path中,添加D:\MATLAB\R2007a\bin\win32。
备注:如果在MATLAB中mcc命令出错,提示“cmd不是内部或外部命令。
”,是因为path 中system32的路径被修改了,需要把系统的变量添加进去。
第一部分:对MATLAB程序进行编译,得到动态链接库1 运行mbuild –setup,安装VC++6.0编译器。
2 编写MATLAB函数,(精通MATLAB与C++混合编程设计 186页的例子) m文件为:function y = sincplot(n)x1 = 0.01:0.01:n*pi;y1 = sin(x1)./x1;x2 = -n*pi:0.01:-0.01;y2 = sin(x2)./x2;y = [y2 y1];plot([x2 x1],y);3 把m文件编译为dll文件运行mcc -B csharedlib:libsincplot sincplot.m,把m文件编译成动态链接库文件。
其中要用到的程序为libsincplot.h,libsincplot.dll,libsincplot.lib,libsincplot.ctf。
并复制到工程目录下。
第二部分:在VC中调用MATLAB动态链接库1、新建工程MFC单文档应用程序。
启动VC,首先对VC进行配置,以便在VC中调用MATLAB动态链接库TOOLS—options—detectories—includes files中添加MATLAB路径D:\MATLAB\R2010\EXTERN\INCLUDED:\MATLAB\R2010\EXTERN\INCLUDE\WIN32(貌似可以不添加)。
Library files中添加D:\MATLAB\R2010A\EXTERN\LIB\WIN32\MICROSOFT以上设置是对VC软件进行的设置,只需设置一次即可。
VC++与MATLAB接口编程方法与实现摘要本文简介了VC++和MATLAB特点,探讨了MATLAB与VC++接口编程的三种方法,并详细论述了MCC和COM组件接口编程的方法和实现过程。
研究表明:采用VC++和MATLAB 接口编程方法降低了编程难度,较好地发挥了两者各自的优势。
关键词 MATLAB;VC++;MCC;COM;接口编程MATLAB是美国MathWorks公司研制开发的一种科学计算软件,它将高性能的数值计算、符号计算和可视化集成在一起,并提供了大量的内置函数以及功能丰富的工具箱,使用方便,编程效率高。
然而,MATLAB是一种解释性语言,运行效率低,不适合作为通用的编程平台。
VC++是Microsoft公司推出的一个基于Windows平台的可视化的集成开发环境,在运行速度、功能性以及应用程序界面开发方面功能强大,但在数值计算和图形绘制方面,VC++并不具备太多优势。
因此,采用MATLAB进行核心程序的开发,用VC++制作出友好的程序界面,然后将两者结合起来,可以较大地提高编程效率。
1 VC++与MATLAB接口方法概述1.1 MATLAB引擎方式MATLAB引擎采用客户机/服务器(Client/Server) 的方式,提供了一组MATAB API函数,通过调用这些函数实现以用程序进程之间的数据传递。
在运用中,让VC++程序作为前端客户机,它向MATLAB引擎传递命令和数据,并从MATLAB 引擎接受数据信息,实现动态通讯。
1.2 MATLAB编译器(MCC)MCC是MATLAB中经过优化的编译器。
使用MCC,用户可以将MATLAB数学库、图形库和界面的MATLAB程序转化为独立于MATLAB的EXE应用程序和DLL动态连接库,在VC中编写程序界面并加载调用动态连接库,实现两者之间的连接。
1.3 COM组件组件对象模型(简称MCR)是以组件为发布单元的对象模型。
它提供一种可以共享二进制代码的工业标准,允许任何符合标准的程序访问,所以COM作为不同语言之间的协作开发是非常方便的。