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作为不同语言之间的协作开发是非常方便的。
Matlab中的面向对象编程指南引言随着现代科学和工程领域的不断发展,计算机编程成为研究和解决问题的重要工具。
Matlab作为一种高级编程语言,在科学计算和数据可视化方面具有广泛应用。
虽然Matlab最初被广泛使用的是基于过程的编程方法,但面向对象编程(Object-Oriented Programming,简称OOP)的引入使得Matlab在更复杂的应用中变得更强大和灵活。
本文将介绍Matlab中的面向对象编程指南,帮助读者理解和运用这种编程方法。
1. OOP的基本概念面向对象编程是一种编程范式,通过将数据(对象)和操作(方法)进行封装,以实现更好的代码模块化和可重用性。
在Matlab中,一个对象是一个数据结构,包含数据字段和函数方法。
对象可以相互交互,以实现特定的功能。
2. 创建类和对象在Matlab中,使用classdef关键字创建一个类。
类是对象的模板,定义了对象所具有的属性和操作。
下面是一个简单的示例:```matlabclassdef Circlepropertiesradiusendmethodsfunction obj = Circle(r)obj.radius = r;endfunction area = calculateArea(obj)area = pi * obj.radius^2;endendend```在上面的例子中,我们定义了一个名为Circle的类。
该类具有一个属性radius 和两个方法:构造函数Circle和计算面积的方法calculateArea。
通过创建一个对象,我们可以使用该类:```matlabmyCircle = Circle(5);myArea = myCircle.calculateArea();disp(myArea);```上述代码创建了一个半径为5的Circle对象,并计算其面积。
结果将会打印出来。
3. 继承和多态继承是OOP中的一个重要概念,它允许创建一个新的类来继承已有的类的属性和操作。
浅析VC与matlab接口编程(一)作者:邓科Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。
相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。
本文将结合作者编程经验,以VC6.0和Matcom为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。
Matcom安装安装Matcom前要已求安装VC6.0。
在安装过程中出现选择编译器对话框,选择“是”(图一)。
出现选择是否安装Matlab时,选“否”。
其他选项采用默认设置。
Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。
图一安装完成后,启动界面MIDEVA(图二)。
MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。
图二Matcom命令输入方法与Matlab相同。
如果安装在中文版操作系统时,输入命令前加一空格。
(如图三)。
图三下面详细介绍如何将m文件编译后放入VC中。
1、启动MIDEVA ,File->New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y);将文件保存(如图四)。
图四m文件保存的默认位置为:matcom安装目录\matcom45,生成的C++文件保存的默认位置为:matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘即C:\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。
2、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。
在面板上添加一个ID为IDC_BUTTON1按扭。
3、将C:\matcom45\Debug目录下的Test1.cpp文件的内容拷贝到void CExamleDlg::OnButton1()下,(如图五)。
MATLAB6.5 与VC6.0混合编程中的VC6.0的设置1. VC6.0路径设置TOOLS(工具)—>Option(选择)—>Directories(目录):executatble files:C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin C:\Program Files\Microsoft Visual Studio\VC98\BINC:\Program Files\Microsoft Visual Studio\Common\TOOLSC:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNTinclude files:C:\Program Files\Microsoft Visual Studio\VC98\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDED:\MATLAB6p5\extern\includeD:\MATLAB6p5\extern\include\cpplibrary files:C:\Program Files\Microsoft Visual Studio\VC98\LIBC:\Program Files\Microsoft Visual Studio\VC98\MFC\LIBD:\MATLAB6p5\extern\lib\win32D:\MATLAB6p5\extern\lib\win32\microsoft\msvc60source files:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRCC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC2. VC6.0工程设置Project->Setting->C/C++ :(1) 在Category 中选择Code Generation;(2) 在Use run-time library 中选择Debug-SingleThreaded,; (3) Precompiled Headers,选择Automatic use of precompiled headers, 并且在Through header 下面添加stdafx.h; (4) 在Category 中选择Preprocessor ,在preprocessor definitions 中添加MSVC,MSWIND,IBMPC。
VC╫中使用MATLAB6.0 C╫数学库的新特点
张让勇;张梅;宋文武;严敬;陈次昌
【期刊名称】《四川工业学院学报》
【年(卷),期】2002(21)4
【摘要】MATLAB6.0与MATLAB5 .3相比 ,在VC 6.0中使用其数学库建立独立于MATLAB运行环境的应用程序时 ,有了很大的不同 ,应用在 5 .3版本下的方法已经不再适用于 6.0版本。
本文作者在详细介绍了这些重大改变后 ,通过一个简单的实例 ,具体说明如何在VC 中使用MATLAB 6.0C 数学库来建立独立运行应用程序的过程。
【总页数】3页(P29-31)
【关键词】MATLAB6.0C++;VC++;数学库;水轮机;选型;软件开发
【作者】张让勇;张梅;宋文武;严敬;陈次昌
【作者单位】四川工业学院能源与环境工程系
【正文语种】中文
【中图分类】TK73;TP311
【相关文献】
1.用Add-in减少VC6.O中goto语句使用错误的研究 [J], 张全法;陈倩
2.如何在VC程序中使用MATLAB的C数学库 [J], 刘春艳
3.VC++中使用MATLAB 6.0 C++数学库的新特点 [J], 张让勇;张梅;宋文武;严敬;陈次昌
4.黑白影像中的光与影--VISICO韦思VC-600HSS高速灯使用报告 [J], 贾云龙(摄影)
5.现代局部战争中后备军使用的新特点 [J], 田宝贤
因版权原因,仅展示原文概要,查看原文内容请购买。
11.4 VC调用MATLAB引擎1、设置VC的头文件和库文件的搜索路径在【工具】----【选项】中设置相应的路径:2、建立工程【文件】----【新建】弹出的对话框中,选择【工程】,然后选择【MFC AppWizard[exe]】。
到这里就不需要继续下一步了,直接【完成】即可。
也可以全部下一步,按默认选项,最后点击【完成】即可。
3、添加源文件【文件】----【新建】,弹出对话框中选则【文件】,选择【C++ Source File】,把【添加到工程】前面打勾,输入文件名Data_interpolation.cpp。
以下为源程序内容4、添加菜单项在左侧的工作窗口中选择【Resource】,然后选择【Menu】,开始编辑菜单栏。
增加【数据插值】菜单,并增加【执行】项。
双击空白方框就会弹出添加菜单的对话框。
5、编写消息处理函数鼠标左键单击新建立的【执行】菜单项,然后右键选择【建立类向导】,弹出的对话框如下所示。
选中【Message:】中的【COMMAND】,右侧的【Add Function】就会由灰变黑。
点击【Add Function】,弹出的对话框中使用默认的函数名,点击【OK】关闭对话框。
然后再点击【Edit Code】就可以添加代码。
如下所示:还要在MainFrm.cpp的头文件之后,声明一下interpolation函数:void interpolation(); 添加位置如下所示:6、设置工程的连接选项选择【工程】----【设置】就会弹出如下对话框。
在【对象/库模块】中添加libmx.lib,libmat.lib,libeng.lib这三个LIB文件,然后点击确定。
7、编译运行选择【组建】----【组建[engwm.exe]】,如果一切正常,就会提示:0 warnings,0 errors。
然后选择【组建】----【执行[engwm.exe]】,运行程序。
运行结果如下:选择【数据插值】----【执行】,就会弹出MATLAB的命令窗口。
1.创建dlg:2.成员变量:.h文件添加头文件#include "engine.h"#include <cv.h>#include <highgui.h>添加成员变量mxArray *m_pOrigMatrix, *m_pColorBw, *m_pBw;int m_nHeight, m_nWidth, m_nChannels;BYTE *lpBuf;BOOL* OpenARPAMotionMatrix;Engine *m_ep;IplImage *m_pOrigin;CHAR* buff;3.按键响应函数//处理void CMatlabEngine00Dlg::OnProcessing(){// TODO: Add your control notification handler code hereBYTE *temp;temp = (BYTE*)mxGetData(m_pOrigMatrix);int i, j;for( i=0;i<m_nHeight;i++ )for( j=0;j<m_nWidth;j++ ){temp[i*m_nWidth+j] = lpBuf[i*m_nWidth*3+j*3];temp[m_nWidth*m_nHeight+i*m_nWidth+j] = lpBuf[i*m_nWidth*3+j*3+1];temp[m_nWidth*m_nHeight*2+i*m_nWidth+j] = lpBuf[i*m_nWidth*3+j*3+2];}engPutVariable( m_ep, "Origin", m_pOrigMatrix );engEvalString( m_ep, "[colorBw,bw]=func(Origin);");if( !mxIsUint8(m_pColorBw=engGetVariable(m_ep,"colorBw")) ){MessageBox("colorBw不是BYTE型!");return;}if( !mxIsLogical(m_pBw=engGetVariable(m_ep,"bw")) ){MessageBox("bw不是布尔型!");return;}BYTE* tempone;BOOL* temptwo;tempone = (BYTE*)mxGetData( m_pColorBw );temptwo = (BOOL*)mxGetData( m_pBw );for( i=0;i<m_nHeight;i++ )for( j=0;j<m_nWidth;j++ ){lpBuf[i*m_nWidth*3+j*3] = tempone[i*m_nWidth+j];lpBuf[i*m_nWidth*3+j*3+1] = tempone[m_nWidth*m_nHeight+i*m_nWidth+j];lpBuf[i*m_nWidth*3+j*3+2] =tempone[m_nWidth*m_nHeight*2+i*m_nWidth+j];//OpenARPAMotionMatrix[i*m_nWidth+j] = temptwo[i*m_nWidth+j];}IplImage *m_lpBuf = cvCreateImage( cvSize(m_nWidth,m_nHeight),8,m_nChannels);memcpy( m_lpBuf->imageData, lpBuf, m_nHeight*m_nWidth*m_nChannels*sizeof(BYTE) ); // IplImage *m_OpenARPAMotionMatrix=cvCreateImage( cvSize(m_nWidth,m_nHeight),8,1); //memcpy(m_OpenARPAMotionMatrix->imageData, OpenARPAMotionMatrix,m_nHeight*m_nWidth*sizeof(BOOL) );cvSaveImage( "E:\m_lpBuf.png", m_lpBuf );//cvSaveImage( "E:\m_OpenARPAMotionMatrix.png", m_OpenARPAMotionMatrix );cvReleaseImage( &m_lpBuf );//cvReleaseImage( &m_OpenARPAMotionMatrix );}//初始化void CMatlabEngine00Dlg::OnInit(){// TODO: Add your control notification handler code herem_pOrigin = cvLoadImage( "E:\\123.png" );m_nWidth = m_pOrigin->width;m_nHeight = m_pOrigin->height;m_nChannels = m_pOrigin->nChannels;if( !(m_ep=engOpen(NULL)) )MessageBox( "无法打开MATLAB引擎" );//命令行添加路径engEvalString( m_ep, "path(path,'c:\');" );%测试成功//engEvalString( m_ep, "addpath('c:\');" );%测试不成功unsigned int dims[3];dims[0] = m_nHeight; dims[1] = m_nWidth; dims[2] = m_nChannels;m_pOrigMatrix = mxCreateNumericArray( 3, dims, mxUINT8_CLASS, mxREAL );lpBuf = (BYTE*)malloc(m_nHeight*m_nWidth*m_nChannels*sizeof(BYTE));memcpy(lpBuf, m_pOrigin->imageData, m_nHeight*m_nWidth*m_nChannels*sizeof(BYTE) );OpenARPAMotionMatrix = (BOOL*)malloc(m_nHeight*m_nWidth*sizeof(BOOL));memset( OpenARPAMotionMatrix, 0, m_nHeight*m_nWidth*sizeof(LONG) );}4.m文件(个人经验:输出变量在matlab中强制转换为需要的变量,若在C++中转换,会出错)function [ output1 output2 ] = func2( b )%UNTITLED2 Summary of this function goes here% Detailed explanation goes hereticsubplot(1,3,1);imshow(b);gray=rgb2gray(b);output2=logical(im2bw(gray,0.4));%强制转换output1=uint8(zeros(1024,1024,3));%强制转换a = output2;a(a==1)=60;o utput1(:,:,1)=uint8(a);%强制转换a = output2;a(a==1)=220;output1(:,:,2)=uint8(a);%强制转换subplot(1,3,2); imshow(output1);subplot(1,3,3); imshow(output2);end。
程序中使用MATLAB编译产生的DLL(VC6.0,MATLABR2010b,mw...最近需要在VC下调用MATLAB的dll,以前没怎么接触过这些,今天特地摸索了一下。
主要借鉴的是taohe兄的这篇帖子:但不同的是我现在用的MATLAB是R2010b,而VC是6.0,两个产品时间间隔达10多年之久。
taohe兄的实验环境是vs2005,MATLAB 2007b两个产品时间间隔还是比较接近的。
之前按照taohe兄帖子里的步骤实现,发现总是无法成功,出现N多各种奇怪错误,譬如:error C2065: 'mclInitializeApplication_proxy' : undeclared identifier 之类的奇怪错误提示(后来才知道这是2008a以后,Mathworks公司对mclmcrrt.h 和mclmcr.h头文件做了修改,要求mclmcr.h必须include在mclmcrrt.h之后。
)现将操作步骤写下:1、编写测试m函数,这个不变,即如下:1.function [y,z] = myadd2(a, b)2.% dummy function, just to demonstrate the idea3.y = a+b;4.z = a+2*b;5.end复制代码2、运行mbuild -setup设置好编译器后(我选的是vc6.0的编译器,没用MATLAB自带的),利用1.mcc -W cpplib:libmyadd2 -T link:lib myadd2.m -C复制代码生成需要的libmyadd2.dll,libmyadd2.h,libmyadd2.lib,libmyadd2.ctf文件。
(注意,R2010b下,mcc -W cpplib:libmyadd2 -T link:lib myadd2.m不再生成libmyadd2.ctf文件,需加-C选项)3、VC下新建控制台程序,步骤如下:file>new,选择Win32 Console Application,右侧project name 填写1.testmyadd2_r2010b复制代码,点击OK。
VC++与Matlab混合编程之引擎操作详解课题需要生成多通道的电压信号,即通过激光接收器转换而成的电信号,然后通过数据采集卡进行向外传输,故想到在传输之前可以将数据以波形的方式显示出来,由于在vc中画图还是比较麻烦的,所以想到用vc调用matlab引擎然后画图,上网一搜这方面的信息还是很多的,不过不好的地方是不能脱离matlab.下面转载些相关知识,以飨大家^_^Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。
但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。
Matlab是一款将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,适合科学研究、工程设计等众多学科领域使用的一种简洁、高效的编程工具。
不过由于Matlab使用的是解释性语言,大大限制了它的执行速度和应用场合。
基于VC和Matlab混合编程是很多熟悉VC ++编程而又需要进行科学计算、数据仿真的科研人员常用的一种方式,其中最简单也最直接的方法就是调用Matlab引擎。
本文以下部分将详细介绍通过VC ++6.0调用Matlab6.5引擎来达到VC++与Matlab数据共享编程的方法。
1. 什么是Matlab引擎所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制。
可以主要功能有:★打开/关闭一个Matlab对话;★向Matlab环境发送命令字符串;★从Matlab环境中读取数据;★向Matlab环境中写入数据。
与其它各种接口相比,引擎所提供的Matlab功能支持是最全面的。
通过引擎方式,应用程序会打开一个新的Matlab进程,可以控制它完成任何计算和绘图操作。
对所有的数据结构提供100%的支持。
同时,引擎方式打开的Matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制Matlab运行的流程,并可在其中输入任何Matlab命令。
MATLAB7.0与VC6.0的接口技术
陈永超;李汉强
【期刊名称】《电脑知识与技术》
【年(卷),期】2006(000)001
【摘要】本文首先分析了Matlab与外部程序接口的意义,然后以Matlab7.0与vC6.0之间接口为例,介绍了目前三种实用的接口方法,最后详细介绍了如何利用Matlab编译器来发布独立于Matlab环境之外的应用程序.
【总页数】2页(P129-130)
【作者】陈永超;李汉强
【作者单位】武汉理工大学自动化学院,湖北,武汉,430063;武汉理工大学自动化学院,湖北,武汉,430063
【正文语种】中文
【中图分类】TP312
【相关文献】
1.VC6.0环境中开发虚拟仪器的技术要点探讨 [J], 陈朝霞;何扬名
2.用VC6.0开发OLE DB Provider的技术 [J], 聂明;吴京;陈荦;陈宏盛
3.基于VC6.0的OpenGL与Windows图形接口设置方法 [J], 陈立伟
4.网络化制造的串口通信技术研究——VC6.0下实现串口通信的方法 [J], 莫进军
5.基于VC
6.0环境下的PDF文件生成技术 [J], 翟震;曹国华
因版权原因,仅展示原文概要,查看原文内容请购买。