VB6.0调用matlab生成的dll文件

VB6.0调用matlab生成的dll文件
VB6.0调用matlab生成的dll文件

环境:win7 64位,matlab2010b,Vb6.0

一、设置环境变量

右键计算机——属性——高级系统设置——环境变量,在用户变量和系统变量中均添加如下路径:路径名为path 值为”C:\Program Files\MATLAB\R2010b\bin\win64”(matlab安装路径),重启计算机。

二、编写m文件,注意以function开头

三、在matlab中设置编译环境

1.在matlab命令窗口中输入mex –setup,选择n,然后在弹出的众多编译器中选择一个,最好选择VC++系列(在进行这一步时,现在电脑上安装VC的编译器,如VC++6.0、Visual Studio,注意要安装英文版),接下来一直选择y,直至看见Done……,证明这一步成功了;

2.接下来输入么build –setup,接下来步骤与1相似,直至看见Done……。

四、进行编译,生成dll文件

1.在matlab窗口中输入deploytool,在弹出的窗口中,name随便填,location选择默认即可,Target选择倒数第二项:Generic COM Component,单击OK;

2.选择Add class,填写class name,单击Add files,选择所需编译的m文件,然后单击

build按钮,等待编译结束,这是会看到生成的文件夹中含

distrib这个文件夹,所需的dll文件即在里面。

五、注册dll

开一个dos窗口(在开始里输入运行即可),在dos窗口中输入:cd/d /runtime/win64,回车,接着输入mwregsvr mwcomutil.dll,即对mwcomutil.dll 进行注册(这个dll是matlab下作的任何com组件都要用到的dll)。

六、在vb6.0中调用生成的dll文件

1.打开vb6.0,点击工程——引用——浏览,找到放置dll文件处,选择,点击确定;

2.vb6.0命令行处应写:

Dim myplot As plot.plot1

Set myplot = New plot.plot1

……

Call myplot.plot1(str, strname, xx5, yy2, y)

(说明:其中myplot为自己取的名字,plot为matlab编译dll文件时的class name,plot1为源文件m文件的名字)

利用DLL技术实现LabVIEW和MATLAB混合编程_彭宇宁

计算机与现代化  2007年第8期 JIS UAN JI YU X IAN DA I HUA 总第144期 文章编号:1006-2475(2007)08-0093-03 收稿日期:2006-08-14 基金项目:广西自然科学基金资助项目(0663022)作者简介:彭宇宁(1959-),女,四川成都人,广西大学电气工程学院高级工程师,研究方向:过程控制工程,网络化控制,虑拟仪器技术。 利用DLL 技术实现Lab V I E W 和MATL AB 混合编程 彭宇宁,朱 后 (广西大学电气工程学院,广西南宁530004) 摘要:介绍了利用DLL 技术实现LabV IE W 和MA TLAB 进行混合编程的基本原理,并详细阐述了使用M ATLA B 插件和使用M ATLA B 引擎两种方法的步骤,最后对两种方法进行了比较,总结了基于DLL 混合编程的技术特点。关键词:动态连接库;Lab V IE W ;MA TLAB ;混合编程中图分类号:TP311.13 文献标识码:A Usi n g DLL Techni q ue to Reali z eM ixed Progra mm ing wit h La bVI E W andMATLAB PE NG Yu -ning ,ZHU H ou (Instit u t e o f E lectrica l Eng i neering ,Guangx i Un i ve rsit y ,N anning 530004,China ) Ab stract :T his paper i n troduces t he keystone o f usi ng D LL to rea lize the m ixed prog ramm i ng w it h Lab V I E W and M ATLA B .A t t he sa m e ti m e ,t he st eps of bo t h m ethods are expa tia t ed :using M ATLA B A dd -i n and i nvoking M ATLA B engine .In the end o f t he ar ticle ,w e co m pa re t hese t wo m ethods ,and s umm arize the advantages o fm i xed progra mm ing v ia DLL .K ey w ords :DLL ;LabV IE W ;MA TLAB ;m i xed progra mm ing 0 引 言 Lab V I E W 作为虚拟仪器的开发软件,具有功能完整、应用灵活、易于理解、编程简单、开发效率高等优点,已成为虚拟仪器开发事实上的工业标准。但其在工程计算、图 形处理、先进控制、系统建模和仿真方面远不及MATL AB 功能强大。而MATL AB 在循环处理、图形界面开发、数据输入、网络通信、硬件控制等方面也不如Lab V I E W 。因此实现两者混合编程,将两者的优势结合互补不足,对于开发功能更为强大的虚拟仪器具有巨大的推动作用。目前Lab V I E W 和MATLAB 的混合编程方法有三种:第一种基于A ctive X 控件技术,包括MATL AB 脚本节点和Active X 函数模板;第二种基于动态数据交换(DDE )技术;第三种基于组件对象模型(C OM )技术。前面两种方法都不能脱离MATL AB 环境独立运行,第三种方法相对独立且执行效率较高,但不能全面支持MATL AB 的应用。本文利用DLL (动态连接库)技术将La bVI E W 、VC 、MATL AB 混合编程有机结合起来,提出一种新的LabVI E W 和MATLAB 进 行数据交换和控制的方法。 1 基本原理 DLL (Dyna m ic -Link Li b r ary )-动态连接库是基于W indo w s 程序设计的一个重要组成部分,它由一系列 封装好的可执行代码组成,其内部函数能被其他程序所共享。DLL 的编制与具体的编程语言及编译器无关,只要遵守DLL 的开发规范和编程策略,并安排正确的接口,不管用何种编程语言编制的DLL 都具有通用性。LabV I E W 通过CLF (Ca ll Librar y Function N ode )实现对DLL 的函数 [1] 。另一方面,MATLAB 通 过MATL AB 编译器和计算引擎为C 语言提供了功能强大的接口,可将与MATLAB 通讯的C 代码编制成DLL 文件供LabV I E W 调用,实现LabV I E W 和MAT -LAB 间接数据交换。下面举一个简单的例子(本例已在LabV I E W 7.1,M icroso ftV isual C ++6.0,MAT -LAB 6.5上通过),介绍利用DLL 实现LabV I E W 和MATL AB 混合编程的两种途径。

MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014a生成C++代码,并用VC2010生成dll 供VBA或VB调用使用说明 一、过程概述 1、使用VC2010生成.dll文件,测试VC程序是否正常 2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否 正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。 3、使用MATLAB编写脚本程序文件,使用MATLAB CODER功能编译成c++文件。 4、VC2010集成MATLAB生成的c++代码,并编译成.dll文件 5、使用步骤1,2验证MATLAB生成的代码 二、具体实施过程描述 1、使用VC2010生成.dll文件 1.1工程建立 首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入工程名称(MakeDll),选择好保存工程的路径-->确定。 在弹出的“应用程序设置”--> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)" ---->点击"完成"进入项目工作窗口

1.2开始创建DLL 第一步: 在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项 ---→选择"头文件(.h)" -->输入文件名称(max) --> 点击“添加(A)”,完成max.h文件的添加。

max.h头文件中的代码为: 1. #ifndef _MAX_H 2. #define _MAX_H_ 3. __declspec(dllexport) int __stdcall fmax(int a,int b); 4. #endif 代码说明: __declspec(dllexport) 的作用是指定导出该函数为DLL函数; __stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用; 备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。这里需要修改的是int数据类型,fmax(int a,int b)的函数名称和变量名称和变量的类型,或者直接从第二步的主程序中复制过来。 第二步: 在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"C++文件(.cpp)" -->输入文件名称(max) --> 添加(A) max.c源文件中的代码为:

vs2008中c调用matlab生成的dll文件

VS2008中C#调用Matlab生成的DLL文件 1、创建一个简单的.m文件 打开Matlab 2009a,新建一个.m文件,输入如下代码:function result=twice(inputvar); result=2*inputvar; 将代码保存为twice.m文件,如图所示。 2、使用Matlab DeployTool生成.Net组件 在Matlab 2009a的Command Window中输入deploytool 并回车,如图所示。 就可以打开Matlab的DeployTool,如图所示。 在DeployTool窗体中,点击新建按钮,打开新建项目对话框,如图所示。 在左边的列表中选择MATLAB Builder NE,并在右边的列表中选择.NET Component,我们将这个工程命名为twice.prj,并点击OK,则进入项目设置界面,如图所示。

在Twice文件夹中添加我们刚才建好的.m文件,如图所示。 点击编译按钮或使用快捷键Ctrl+B则对该工程进行编译。编译完成后的主窗口如图所示。 3、创建一个测试用的Windows应用程序,将其命名为MatlabTest,如图所示。 4、添加对MWArray.dll的引用 MWArray.dll一般位于[Matlab安装位 置]\R2009a\toolbox\dotnetbuilder\bin\win32\v2.0文件夹中,我们注意到Matlab 2009a对应的MWArray.dll是2.9.0.0版本的。在进行Matlab版本升级的时候,比较头疼的就是这个dll。 因为版本升级意味着之前生成的dll都需要重新生成。关于版本升级的问题,我将在后面的博文中详细介绍。 之所以添加MWArray.dll,是因为在这种混合编程方式下,我们经常要 using https://www.360docs.net/doc/7a4428288.html,.Arrays; using https://www.360docs.net/doc/7a4428288.html,.Utility; 5、添加对Matlab生成的twice.dll的引用。

Matlab调用MFC应用实例

//MainFunction.cpp #include "stdafx.h" #include "mex.h" #include "MFCDialog.h" voidmexFunction(intnlhs, mxArray *plhs[], intnrhs, constmxArray *prhs[]) { mxArray *pa=NULL; double *x=NULL; double *y=NULL; double *result=NULL; charstrbuf[50]; if(nrhs!=2) { mexErrMsgTxt("You can only input 2 arguements!"); return; } else { x=mxGetPr(prhs[0]); y=mxGetPr(prhs[1]); sprintf(strbuf,"x=%f,y=%f",*x,*y); mexPrintf(strbuf);

plhs[0]=mxCreateDoubleMatrix(1,2,mxREAL); result=mxGetPr(plhs[0]); result[0]=*x; result[1]=*y; mexPrintf("\nStart MFC\n"); MFCDialog *a; a=new MFCDialog(); if(a->DoModal()==IDCANCEL) { mexPrintf("Exit MFC\n"); } mexPrintf("End MFC\n"); } } // MFCDialog.cpp : implementation file // #include "stdafx.h" #include "MFCPlot.h" #include "MFCDialog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE

MATLAB调用C++DLL

MATLAB调用C++动态库的方法 声明:本人知识水平有限,文档中难免有错,望谅解! 一、方法步骤 1、首先确定你的动态库正确,并将你的动态库(例如:Demo.dll)和静态链接库 (Demo.lib)和自定义的相关头文件(例如:Demo.h等)拷贝到当前工作目录下,当然也可以将你的动态库拷贝到C盘的windows\system32目录下。 2、写.cpp文件,并用mex命令生成.mexw64或者.mexw32文件(这由你的系统决定), 其实,这个文件起转换作用。也就是说,你用MATLAB调用C++动态库就必须通过 这个文件去调用,而这个文件就是由.cpp文件生成的。 这个.cpp文件中必须包含这个mexFunction函数,格式也必须如下: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) nlhs:输出参数个数 plhs:输出参数列表 nrhs:输入参数个数 prhs:输入参数列表 不过函数名可以随便取的。在这个函数中你就可以去调用C++动态库的函数了。 记住头文件:”mex.h”…… 注意:保存的文件名就是将来在MATLAB中调用的函数名,而不是这里的函数名。 3、使用mex命令编译XXX.cpp。如:mex xxx.cpp ;那么系统将生成xxx.mexw32或者xxx.mexw64 文件。这个文件的文件名就将是你要调用的函数名; 4、现在就可以写脚本调用这个函数了。 二、案例 1、现在生成了一个C++动态库Demo.dll\Demo.lib,还有头文件Demo.h;里面定义了一个函数 double Demo_Add( double x, double y); //功能:将两个数相加并返回 这些大家都知道,不用我说了吧。 2、在MATLAB中写一个c++文件Test.cpp: #include "mex.h" #include "Demo.h" #pragma comment(lib,"Demo.lib") void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if( nrhs != 2) //判断输入参数的个数

Matlab调用VC生成的dll的具体步骤

Matlab调用C生成的dll的具体步骤一、C生成dll文件(以vs2008为例) 1创建项目: Win32->Win32项目,名称:MyDLL

2新建头文件testdll.h,并编写相关程序 注:一定要注意头文件的写法,此法是支持C的头文件,Matlab调用DLL只支持用C 语法写成的DLL,C++的一些关键特性如类、继承等都不支持,用起来的话局限性很大的,还不如单独再用M文件把算法再写一遍进行仿真呢。

具体程序如下 #ifndef MATLABDLLTEST_H #define MATLABDLLTEST_H #ifdef __cplusplus extern "C" { #endif __declspec(dllexport) double add(double x, double y); #ifdef __cplusplus } #endif #endif 3新建源文件testdll.cpp,并编写相关程序

具体程序如下所示: #include "stdafx.h" #include "testdll.h" double add(double x, double y) { return (x+y); } 4新建模块定义文件mydll.def,并编写相关程序

二、Matlab调用生成的dll 1、编译器准备 1)在Matlab的命令窗口输入:mex -setup

2)选择你的编译器,我的是: [2] Microsoft Visual C++ 2008 SP1 in c:\Program Files\Microsoft Visual Studio 9.0 2、加载DLL:把编译连接之后产生的myDLL.dll和testdll.h文件拷贝到Matlab的当前工作目录下,并编写.m函数 具体程序 clc; clear all; close all; addpath('dll的具体路径即Matlab的当前工作路径')%输入dll文件具体的存储路径 loadlibraryMyDLLtestDLL.h alias lib%加载MyDLL库,并重命名为lib,注意加载时常常需要MyDLL的头文件 libfunctionsview lib %执行此命令后会生成如下窗口

matlab生成dll方法的心得体会

将MATLAB函数编译成dll 供VC调用的方法 1简介 1.1 MATLAB简介 MATLAB名字是由MATrix和LABoratory两词的前三个字母组合而成。是美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。 经几年的校际流传,在Little的推动下,由Little、Moler、Steve Bangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市场。 目前,MATLAB己经成为应用最广泛的科学工程计算软件,它广泛的应用于自动控制、数学运算、信号分析、图象处理、财务分析等各行各业。用MATLAB 编写的数学运算及图像处理等程序十分简单,在MATLAB里有大量的MATLAB 库函数,包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插值函数等等,还可以利用MATLAB的编译工具将m文件方便的转化为C\C++语言、可执行程序(exe)、动态连接库文件(dll)、COM组件等等,并可直接供C\C++语言调用。 为什么要用VC与MATLAB接口? 既然MATLAB拥有强大的数值计算功能,利用VC与MATLAB接口可以充分发挥它的数值计算功能,并且可以不依赖MATLAB软件运行,在VC下做出漂亮的界面,把复杂的数据处理交给MATLAB去做。 1.2 MATLAB函数编译为dll与VC之间的通讯方式 1、使用自带的MATLAB Compiler 2、使用MATcom工具 3、在MATLAB下做com组件,在VC中调用com组件(出现了点问题,目前还没找到解决方法,这种方法在m文件较大、用matcom、调用math library 或使用mcc方式无法实现的时候,推荐使用)

VB调用Matlab生成的dll完全攻略(混合编程必备)

用VB调用Matlab生成的dll MATLAB 具有强大的运算功能,VB 具有开发界面友好的特点,可以将二者结合,可以开发出脱离MATLAB 环境的VB程序,即利用VB调用Matlab生成的dll。 工具/原料 Microsft Visual Basic 6 Matlab 7.0 步骤/方法 在MA TLAB 系统中的命令输入comtool命令或点击左下角“Start- > MATLAB - > MA TLAB COMBuilder - > MATLAB COM Builder”,启动MATLAB COM Builder。 建立工程,选择菜单“File - > New Project”,设置工程参数。设置的工程名为COM 组件编译后的文件名称,也可以输入新类,点击“Add”建立新类。

点击菜单“Project - > Add File. . . ”,向工程中加入M或MEX文件。 点击菜单“Build - >COM Object. . . ”,状态窗口出现“Standalone DLL build complete.”说明生成dll成功。

注册生成的myfunc_1_0.dll,在VB中引用MWComUtil.dll和myfunc_1_0.dll,就可以像调用里边的函数了!

插入完成后,Visual Basic中的具体调用方法和命令 此时Matlab中定义的函数: function daoju_gonge(z,x,m,ha,c,b) (函数名daoju_gonge) VB调用 1.先对所有的参数进行定义(关键) Private z As Double Private x As Double Private m As Double Private ha As Double Private c As Double Private b As Double Private theDaoju As myDaoju.Daoju (theDaoju 是自己设定的一个VB中的变量,myDaoju 则是由.m文件编译而成的.dll文件文件名,同时也是其中定义的组件名Component name,daoju则是其类名Class name) 2.调用命令 Call theDaoju.Daoju_gonge(z, x, m, ha, c, b) 3.对VB进行初始化 Private Sub Form_Load() Set theDaoju = New myDaoju.Daoju End Sub 注意事项以及相应问题解决 1.在编译dll时,需要机器安装有C或C++编译器,比如安装VC++6.0 2.Matlab启动Comtool工具之前,还需要利用mbuild –setup 命令对compiler(转换器) 设 置,将转换器设置成C++/C语言对应的compiler,而不是Matlab自带的compiler。 Ps:前两条如果没有做到的话,在comtool生成界面往往出错,无法生成dll等相应的文件。 3.如果出现有其他一些小问题,尝试重启Visual Basic或Matlab,再或者重启电脑。 疑难点: 如果对文件进行处理,使其能够在其他电脑上同样实现设定的功能。 可选方案一:文件打包。 Visual Basic打包程序或是Matlab打包程序。

CSharp使用DLL进行调用MatLab混编

CSharp使用DLL进行调用MatLab混编 Lanix Beavis 2013/1/27 Beijing Normal University, 978109939@https://www.360docs.net/doc/7a4428288.html, 软件配置 (2) 一、生成DLL库 (2) 1. 函数准备 (2) 2. 环境预设 (2) 3. DeploymentTool生成DLL (3) 二、CSharp调用DLL (6) 1. 添加引用 (6) 2. 调用实例 (6) 3. 加载错误 (7)

软件配置 MATLAB:Version 7.11.0.584(R2010b),64-bit(win64) CSharp:Visual Studio 2010专业版,4.0.30318 RMRel,64-bit(win64) 一、生成DLL库 1. 函数准备 2. 环境预设

3. DeploymentTool生成DLL 点击Desktop->Deployment Tool,点击“here”或->New Project生成新项,此处为M2CTEST.prj 。点击[Add class]生成指定名称的类,点击[Add files]添加M方法文件作为该类下的方法。添加类及方法后,点击打包文件,生成的dll文件在M2CTEST\src目录下。

二、CSharp调用DLL 1. 添加引用 启动Visual Stidio新建新项目,此处项目为控制台应用程序ConsoleApplication2。 在ConsoleApplication2中添加项目引用,右键单击“引用”,点击“添加引用”,包括自己生成的DLL和Matlab环境DLL: M2CTEST\src\M2CTEST.dll Program Files\MATLAB\R2010b\toolbox\dotnetbuilder\bin\win64\v2.0\MWArray.dll 在Program.cs中添加类引用: using https://www.360docs.net/doc/7a4428288.html,.Arrays; //用于数据转换 using https://www.360docs.net/doc/7a4428288.html,.Utility; //用于绘图 using M2CTEST; //自己生成的DLL库,调用Matlab函数 2. 调用实例

matlab生成dll的编译错误

M函数文件编译成DLL文件问题请教 编译环境:MATLAB 7 R14 有如下函数 function y = sample (x)    y = x +1; 保存为sample.m文件,然后执行如下命令编译:(有一个警告信息出现?!) >> m cc -W lib:sample -T link:lib sample   To get started, select MATLAB Help or Demos from the Help menu. Warning: No m atching builtin function available for C:\MATLAB7\toolbox\simulink\simulink\set_param.bi 编译后得到如下一批文件: sam ple.ctf,sam ple.exports,sample.m,sample.dll,sample.h, sam ple_m cc_com ponent_data.c ,sam ple.c,sam ple.exp,sample.lib 其中*.dll文件可以在其他语言(我现在是用Python)中成功调入,当时不能执行函数运算。我查遍GOOGLE的信息,猜测可能的原因是经编译后DLL文件中的函数名不在是原来的函数名(Functions m ay be exported with [b]mangled names[/b])。然后利用软件工具“Dependency Walker ”打开sample.dll则可以看到里面好像有五个函数: _mlfSample _mlxSample _sampleInitialize _sampleInitializeWithHandlers _sampleTerminate [b][color=red]问题请教:[/color][/b] (1)编译时如何控制输出的DLL文件中的函数名? (2)编译时的警告信息为何意? 非常感谢! 回复:M函数文件编译成DLL文件问题请教 我是用-l 参数进行编译的,生成的dll种的函数名都没有下划线。 回复:回复: M函数文件编译成DLL文件问题请教

Matlab调用DLL以及matlab指针参数传递

Matlab调用DLL 本来想把算法写成一个DLL的形式,这样既可以在控制软件中方便调用,又可以在Matlab中通过调用外部DLL的形式对算法进行仿真分析,所以需要了解Matlab调用外部DLL的方法,但是后来发现Matlab调用DLL只支持用C语法写成的DLL,C++的一些关键特性如类、继承等都不支持,用起来的话局限性很大的,还不如单独再用M文件把算法再写一遍进行仿真呢。这里把Matlab调用DLL 的过程记录一下吧,以后有用到的时候再说。 在Matlab的Help中搜索"Calling Functions in Shared Libraries"即可看到关于此内容的帮助文档。 下面以一个简单的小例子演示Matlab调用DLL的过程: 1、编译器准备 在Matlab的命令窗口输入:mex -setup 选择你的编译器,我的是: [2] Microsoft Visual C++ 2008 SP1 in c:\Program Files\Microsoft Visual Studio 9.0 2、编写你自己的DLL 在Visual Studio 2008中新建一个Win32的Dll工程,不妨设名字为MatlabDllTest,编辑MatlabDllTest.cpp: #include "MatlabDllTest.h" double add(double x, double y) { return (x+y); } 编辑MatlabDllTest.h: #ifndef MATLABDLLTEST_H #define MATLABDLLTEST_H #ifdef __cplusplus extern"C" { #endif

由MATLAB的m文件生成动态链接库的方法说明

由MATLAB的.m文件生成动态链接库的方法说明 李知践 1.把MATLAB编译器(MATLAB Complier: mcc)集成到 VC6.0中 第一步:在安装MATLAB时,要安装MATLAB编译器(MATLAB Complier)。 第二步:在MATLAB命令提示符>>或者DOS命令框中键入命令: mex –setup 进行编译环境选择:VC6.0。 第三步:在MATLAB命令提示符>>或者DOS命令框中键入命令: mbuild –setup 进行编译环境选择:VC6.0。 第四步:在MATLAB命令提示符>>键入命令: prefdir 显示用户 preference 目录位置。 第五步:在MATLAB命令提示符>>键入命令: mccsavepath 然后将MATLAB的work目录中的mccpath文件拷贝到用户 preference 目录中。 保存Complier的路径信息。 第六步:如果使用的是Windows98,要在你的config.sys文件中加入一行: shell=c:\https://www.360docs.net/doc/7a4428288.html, /e:32768 /p 第七步:在VC6.0的Tools -> Customize -> Add-ins and Macro 选中MATLAB add-in for Visual Studio。将会出现MATLAB add-in for Visual Studio 工具栏。 同时MATLAB已在VC6.0的 Wizard 中新增了一项:MATLAB Project Wizard

2.MATLAB Project Wizard 的使用方法 第一步:在VC6.0中选取 File -> New -> MATLAB Project Wizard 建立一个新项目。 第二步:在MATLAB Project Wizard 中,选择项目的应用类型:

VB6.0调用matlab生成的dll文件

环境:win7 64位,matlab2010b,Vb6.0 一、设置环境变量 右键计算机——属性——高级系统设置——环境变量,在用户变量和系统变量中均添加如下路径:路径名为path 值为”C:\Program Files\MATLAB\R2010b\bin\win64”(matlab安装路径),重启计算机。 二、编写m文件,注意以function开头 三、在matlab中设置编译环境 1.在matlab命令窗口中输入mex –setup,选择n,然后在弹出的众多编译器中选择一个,最好选择VC++系列(在进行这一步时,现在电脑上安装VC的编译器,如VC++6.0、Visual Studio,注意要安装英文版),接下来一直选择y,直至看见Done……,证明这一步成功了; 2.接下来输入么build –setup,接下来步骤与1相似,直至看见Done……。 四、进行编译,生成dll文件 1.在matlab窗口中输入deploytool,在弹出的窗口中,name随便填,location选择默认即可,Target选择倒数第二项:Generic COM Component,单击OK; 2.选择Add class,填写class name,单击Add files,选择所需编译的m文件,然后单击 build按钮,等待编译结束,这是会看到生成的文件夹中含 distrib这个文件夹,所需的dll文件即在里面。 五、注册dll 开一个dos窗口(在开始里输入运行即可),在dos窗口中输入:cd/d /runtime/win64,回车,接着输入mwregsvr mwcomutil.dll,即对mwcomutil.dll 进行注册(这个dll是matlab下作的任何com组件都要用到的dll)。 六、在vb6.0中调用生成的dll文件 1.打开vb6.0,点击工程——引用——浏览,找到放置dll文件处,选择,点击确定; 2.vb6.0命令行处应写: Dim myplot As plot.plot1 Set myplot = New plot.plot1 …… Call myplot.plot1(str, strname, xx5, yy2, y) (说明:其中myplot为自己取的名字,plot为matlab编译dll文件时的class name,plot1为源文件m文件的名字)

vc调用matlab工具箱实例

本文详述了在Vc环境下如何利用Matlab工具箱进行数字信号处理,全文以Matlab工具箱中功率谱密度分析函数为例,介绍了通过Matlab自带的引擎、Matlab自身的编译器以及利用MathTools公司的Matcom进行对工具箱函数的调用。 关键词:Matlab M-文件引擎编译器Matcom Vc++ Matlab的信号处理工具箱是信号算法文件的集合,它处理的基本对象是信号与系统,信号处理工具箱位于目录、Toolbox\Signal下,利用工具箱中的文件可以实现信号的变换、滤波、谱估计、滤波器设计等。在其它的环境如Vc下如果能调用Matlab工具箱中的文件,会大大地加快一些算法的实现,同时其可靠性也很高。 1. 利用 Matlab引擎 Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C 语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数:engOpen, engGetArray, engPutArray, engEvaString, engOutputBuffer ,engClose与客户机进行交互。

下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框.cpp文件中加入”engine.h”和“math.h”头文件,下面给出部分程序清单。 Void CtestmatlabDlg::OnMatlabEngine(){ Engine *ep; mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL; double datax[1024]; char buffer[1024]; for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要 { double samt=(double)(1.0/1024);

在matlab中调用c程序(32位与64位matlab)#(优选.)

1.Maltab 编译Mex文件(不可调试) (1)hello word 在matlab命令行中输入:mex -setup选择合适编译器,完成设置。 新建一个文件,输入: #include void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[]) { mexPrintf("Hello word!"); } 把上面程序保存为一个C文件,如hello.c 在command window下运行 >> mex hello.c >> 结束之后在current folder 窗口里会有一个hello.mexw32文件。 在command window下运行 >> hello() Hello word! (2)如果是多维数组并不能用Arr[i][j]的格式寻址,在参数在C里只是一维数组, 一维数组按列排列,C语言是按行排列的, 如[a b c d;e f g h]C语言在内存中是按a b c d e f g h排列,而matlab是按 a e b f c g d h排列的。 如果要变成C语言可Arr[i][j]索引的格式,可用for循环转化 打印函数: mexPrintf()相当于matlab的disp函数, mexPrintf函数里需要打印的部分必须用""而不能用'' 子函数的问题: 子函数有两种方式,一种采用return值得方式返回值 另一种方式为利用参数返回值,把需要return的值直接赋给形参。 多个.c文件的编译: 多个.c文件中只能存在一个mexFunction函数 可用mex ('a.c','b.c','d.c')的格式编译 2.在VS中调试mex (1)在vs中建立dll工程,建立project.cpp文件,输入 #include "project.h" #include void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[]) {

C通过matlab生成的dll来链接matlab的具体步骤

VC++通过matlab生成的dll来调用matlab函数 一matlab生成dll 众所周知Matlab的强大运算能力让各种工程软件望而却步,而VC程序的友好界面又让人爱不释手,如果能够让两者的优势结合起来的话,势必能让程序员欢欣鼓舞。还好MathWorks已经为我们想到了,基本上现在市面上主流的Matlab版本都可以支持VC和Matlab的混合编程。但是目前网上资料基本上都是基于Matlab 6.0和VC 6.0的,和新版本的实现方法有所不同,因此笔者通过不断的尝试和研究,终于调试通了基于VS2008和Matlab R2011b的混合编程。 1 编写.m函数 为了更加直观的说明如何实现混合编程,笔者写了一个简单的程序作为测试。先在Matlab里面写一个M文件,代码如下: function b = MyFunc(a) b = a.*a; 将M文件保存为MyFunc.m,保存在F:/test文件夹中。然后在Matlab主窗口中将当前文件夹改为F:/test: cd F:/test; 2 设置Matlab编译库 为了能够让VC调用Matlab程序,我们可以采用将Matlab程序包装成动态链接文件DLL的形式,然后让VC调用动态链接文件,因此在Matlab中,我们需要设置一下Matlab的编译库,在Matlab主窗口中键入如下代码: mbuild –setup(注意‘–’前面是有空格的)

然后出现 Please choose your compiler for buildingstandalone MATLAB applications: Would you like mbuild to locate installedcompilers [y]/n? 键入y后回车,出现 Select a compiler: [1] Lcc-win32 C 2.4.1 inD:\PROGRA~1\MATLAB\R2010b\sys\lcc [2] Microsoft Visual C++ 2008 SP1 inD:\Program Files\Microsoft Visual Studio 9.0 [0] None Compiler: 由于我们是需要用VC来调用Matlab函数,因此我们选择2,回车,出现 Please verify your choices: Compiler: Microsoft Visual C++ 2008 SP1 Location: D:\Program Files\Microsoft VisualStudio 9.0 Are these correct [y]/n? 确定,键入y后回车,出现

matlab和c++调用DLL方法(可编辑修改word版)

Matlab 和C++调用DLL 方法 Matlab 可以调用外部DLL,如用C 或C++写的DLL。本文分三个部分介绍Matlab 和C++调用DLL 方法。 一、C++写dll 方法 二、C++调用dll 三、Matlab 调用dll 一、C++写DLL 方法 在CPP 文件中和普通CPP 没什么区别,在H 文件中加上需要导出的函数名,格式如下: extern "C" int declspec(dllexport)add(int x, int y); 蓝色部分是函数返回的类型,红色部分是要导出的函数,就这么简单。下面是两个整数相加的代码: main.h: extern "C" int declspec(dllexport)add(int x, int y); main.cpp: #include "main.h"

int add(int x, int y) { return x + y; } 编译即可得到dll 文件,我的工程名叫mydll,因此得到的 是mydll.dll 二、C++调用DLL 方法 将DLL 文件拷入到源文件夹中,在CPP 代码中引入windows.h 文件,否则有些方法找不到,用指针来接受参数。装载DLL,用函数名,卸载DLL。代码如下: #include #include using namespace std; int main(void) { typedef double(*padd)(double a,double b); double r; HINSTANCE hDLL;

padd add; hDLL=LoadLibrary("mydll.dll"); add=(padd)GetProcAddress(hDLL,"add"); r=add(5.3,8.6); cout<> loadlibrary('mydll.dll','main.h') >> libfunctions('mydll') 会得到如下信息: Functions in library mydll: add 接着输入: >> calllib('mydll','add',3,5)

关于调用matlab生成的dll

第25卷总第53期 西北民族大学学报(自然科学版)Vol.25,No.2 2004年6月 Journal of N orthw est U niversity for N ationalities(Natural Science)J une,2004 在VB开发环境中调用 由MA TLAB函数转化的DLL 冯 旭 (西北民族大学现代教育技术学院,甘肃兰州730030) [摘 要]VB是一个高效快速的软件开发平台,但在进行数值计算需要编写大量的代码,还需要反复调试以保证其可靠性和稳定性1通过编写DLL,只须少量代码,并且MA TLAB的算法是经过商业化的考验,比较可靠,省去了许多软件维护费用1特别是要编写一些复杂的算法,例如,大型稀疏矩阵、大型线形方程组的解法、微分方程及偏微分方程的解法等等,并在此基础上开发更复杂的算法,该方法的优越性将更加明显1 [关键词]MA TLAB;MIDEVA;Matcom4;VB;DLL [中图分类号]TP311 [文献标识码]A [文章编号]1009-2102(2004)02-0065-03 Matlab是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,适合于科学和工程技术人员使用的计算语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便、界面友好的用户环境1它还包括了ToolBox(工具箱)的各类问题的求解工具,可用来求解特定学科的问题,其基本元素是一个为数不限的复矩阵,并完成了对矩阵运算效率的优化1MA TLAB采用M-语言进行编程,在程序执行过程中对M-文件进行解释,程序结构完整,但不能脱离其环境运行,因此它不能被用于开发商用软件1Visual Basic开发平台提供了开发Windows应用程序最迅速、最简洁的方法,特别在我国VB拥有非常广泛的用户群体1但VB的数值计算功能并不十分强大,往往一个简单的算法就需要很多代码完成,更何况复杂的矩阵运算,因此很多人由于这方面原因而放弃使用VB,造成不必要的资源浪费1为了使VB,最大限度地发挥MA TLAB功能,同时脱离MA TLAB这一庞大的运行环境,本文将介绍MA TLAB函数即M-文件如何转换到DLL以及如何在VB中调用这一类动态库1本文开发环境为MA TLAB6.0、M IDEVA4.5、Matcom4.2、VB6.01 1 VB与MA TLAB混合编程方式 VB与MA TLAB结合在一起编程的方式主要有以下几种:(1)利用组件对象模型即COM规范,自动化Automation协议,通过引擎(Engine),采用客户机/服务器(Client/Server)模式进行通信1实际应用中,VB作为前端客户机通过引擎调用作为Automation服务器端的MA TLAB1但这种方式需要MA TLAB在后台实时运行,不能生成独立运行的应用软件包,因此,在软件开发中很少使用1(2)利用Matlabvbtrix1Matlabvbtrix是Math Tools公司(已被MathWorks收购)专门为VB开发环境提供的一个COM接口,主要包含MA TLAB中常用的500多个函数,但用户也仅限于使用这些函数,不能随意编写 [收稿日期]2004-04-15 [作者简介]冯旭(1970—),男,工程师,主要研究方向:计算机网络与工程1 — — 5 6

相关文档
最新文档