VB调用Matlab生成的dll完全攻略(混合编程必备)
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_H2. #define _MAX_H_3. __declspec(dllexport) int __stdcall fmax(int a,int b);4. #endif代码说明:__declspec(dllexport) 的作用是指定导出该函数为DLL函数;__stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用;备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。
VB调用MATLAB步骤

a = Val(Text1.Text)
b = Val(Text2.Text)
Call hh.myadd(1, c, a, b) 'myadd为MATLAB中的函数名,1为输出变量个数,c为输出变量定义为variant型,a,b为输入变量,定义为double型
Y=a+b;
VB程序如下:
Private Sub Command1_Click()
Dim hh As New ABC.ab 'ABC 为COMPONENT NAME,ab为class name
Dim a As Double ‘输入参数
Dim b As Double ‘输入参数
3.matlab会列出所有电脑上所有的编译器,选择Microsoft Visual C/C++ version 6.0
4.The default location for Microsoft Visual C/C++ compilers is C:\Program Files\Microsoft Visual Studio, but that directory does not exist on this machine
Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? 选择n
5.Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] 键入vc++6的安装位置E:\INSTALLBACK\Microsoft Visual Studio vc6.0
五种VB与MATLAB混合编程接口的方法

摘要: 为充分发挥Matlab与VB各自的优势,将二者结合起来进行工程应用软件的开发。
本文介绍了五种VB与MATLAB混合编程接口的方法,并对各方法性能的优劣进行了比较和评价。
关键词: Matlab;Visual Basic;ActiveX;DDE;MatrixVB;DLL;COM1引言Microsoft Visual Basic是由微软公司开发的可视化编程语言之一,由于它简单易学的特点,只要稍有编程基础就可以很快掌握,可视化的用户界面设计功能,把程序设计人员从繁琐复杂的界面设计中解脱出来。
因而很快就风靡全球,是一种十分强大和有生命力的Windows 编程语言。
但是我们知道VB语言也有它的缺点,即对于数值计算方面其能力欠佳。
Matlab是Matlab 擅长处理数值计算和系统模拟仿真,已被广泛应用于数字信号处理、电力系统仿真、图像处理、系统识别等各个领域。
但是Matlab也存在一些缺点: 1、和其他高级程序相比,程序的执行速度较慢,那是因为;2、对于底层硬件操作以及编程界面方面远远比不上VB、VC 等软件。
鉴于二者各自的优势,为了提高工程软件的开发效率和质量,将两种软件结合起来进行工程应用软件的开发便成了实际的需要。
本文主要讨论VB与Matlab混合编程的几种方法。
2Vb和Matlab接口实现方法介绍2.1借助ActiveX技术ActiveX是特点就是使不同的软件对象可以跨进程、跨平台并能在网络上进行交互。
Matlab ActiveX自动化服务的功能主要包括在(1) Execute (Command as String) 方法: 执行本方法将调用MATLAB执行一条Command 字符串决定的Matlab命令,同时返回一条字符串表示命令的执行情况。
任何能在MATLAB命令行窗口执行的命令均可以被包括在Command 字符串中。
(2) GetFullMatrix方法: 该方法用来将Matlab中的一个矩阵变量传送到VB 程序的一个一维数组或二维数组中。
VB与Matlab混合编程

一、准备工作(1)matlab版本2012或以上(2)vb6.0二、适用条件matlab生成的无论是应用程序还是动态连接库或者是COM组件都需要MCR的支持,MCR因用户安装的Matlab版本不同分为32位和64位,所以为了能够将自己编译的M文件能够应用于其他的电脑上,首先要在目标电脑上安装自己电脑中MCR这个应用程序,它的存放位置为Matlab路径\ toolbox\compiler\deploy\win64三、Matlab与VB基于Com组件的实现过程(1)在Matlab中生成M文件的COM组件打开App菜单栏,找到Matlab Complier单击进入应用,会出现上图的界面,在Classes 中可以添加自己要用的类群,所谓的类群就是好比如果你想建立一个专门用于解决非线性方程的类,就可以建立个nonlinear equations solver,在类下可以添加用于解决非线性方程的各种M函数文件。
在这里我建立了fft类,在这个类中我添加了个myfft.M文件,这个M文件实际上使用了Matlab自带的离散傅立叶变换函数fft,这么做的目的是为了说明我们可以调用matlab已经建立好的各种算法,方便的在vb中调用。
添加好所需要的资源,点击build就OK了。
(2)注册生成的COM组件在Build Success后会在你选择生成Com组件的文件地址发现两个文件distrib和src,在distrib文件里你会发现你生成.dll文件,在电脑上注册它就可以在vb上调用。
至于怎么注册,自行脑补。
(3)在VB中调用Com组件在vb中的引用中通过浏览功能引用生成.dll文件,那么现在就可以使用了。
使用步骤:1.Dim xxx as new 工程名.类名xxx可以随意,工程名为你在Matlab中生成COM组件时自己定义的COM 组件名,类名为COM组件下你添加的类名2.通过xxx.函数名(nargout,y1,y2,y3,....,yn,x1,x2,...,xn)函数名为Matlab中定义在此类下的函数名,nargout为输出变量个数,y1,y2,...,yn 为输出变量,x1,x2,....,xn为输入变量。
vs2010调用matlab2014a的dll详细步骤(一)——详述matlab的dll生成

vs2010调⽤matlab2014a的dll详细步骤(⼀)——详述matlab的dll⽣成做⼯程这么多年了,总是索取,没有奉献,这样确实不是我的处世态度,这是我的第⼀篇技术贴,以后在⼯作中如果有好的经验⼀定会记录下来,供⼤家分享,共同进步。
先说我的⼯程环境,win7 64位机,装了matlab2014a和vs2010,⽹上有很多讲vs调⽤matlab的帖⼦,能够成功的完成vs 的调⽤也多亏了这些帖⼦,然⽽没有⼀篇完整的帖⼦讲述整个过程,所以我就把⾃⼰从头到尾的步骤,⾃⼰的困惑和解决⽅法都列出来,供⼤家相互学习。
⾸先,matlab⽣成dll。
我装的是盗版matlab2014a,单位只有⼀个正版的matlab⼀直没⽤,我觉得盗版的舒服,感觉像偷偷占了便宜,例⼦中使⽤的是简单的两数和,⽣成matlab⼦函数。
2014a是个坑,它本⾝编译系统有问题,所以需要⽤该⽹址下载⽂件,/smilebluesky/article/details/42987985,替换原有⽂件。
就会解决刚开始的编译问题。
接下来上图,说明整个编译过程步骤。
1、matlab命令⾏输⼊deploytool2、选择第⼆个“Library Compiler”3、添加⽂件,选择“C++ Shared Library”,点击“+”选择编译的⼦函数⽂件“myAdd.m”4、添加完成后,点击对号“Package”5、编译完成,⽣成dll会弹出⽂件夹6、在⽂件“for_redistribution_files_only”中存在我们需要库⽂件完了。
有⼀点需要说明,当时困惑了我。
现在在例程中我们使⽤的是简单的matlab程序,他没有调⽤matlab的函数和⾃⼰编写的函数,如果有函数调⽤了应该怎么写,需要对所有的⼦函数也进⾏编译码?后来问了度娘,⾃⼰也试了,结论如下:分两种情况,1、调⽤⾃⼰编写的⼦函数,这样编译时需要将所有的函数放在同⼀个⽂件夹下,这样编译时会⾃动将被调⽤的⼦函数,放在库中,在vs调⽤时没有问题;2、调⽤了matlab⾃带的函数,这种⽆所谓,直接编译就可以了,matlab会⾃动按照环境变量的设置去寻找库⾥的⼦函数,但有⼀个特例就是神经⽹络,它是不能被编译的,⼈家matlab公司说了,神经⽹络的算法是不对外公开的,所以不能使⽤,这种情况⼤家就在⽹上找神经⽹络的c语⾔代码吧。
VB调用MATLAB混合编程教程(完整版)

VB与MATLAB混合编程探讨摘要:介绍了VB与MATLAB混合编程的方法,二者结合可以充分利用VB的方便快捷和MATLAB软件工具箱的强大功能。
关键词:VBVC++MATLABDLL编译MATLABAdd-inMATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。
但是MATLAB语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。
VisualBasic作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。
因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的技术支持。
1基本思路及实现方法MATLAB提供了与C++、Fortran的程序接口,并没有提供直接与VB的接口。
目前VB与MATLAB混合编程方面主要使用以下一些方法:(1)在VB中通过调用MATLAB的引擎(Engine)接口,使用Windows的OLE或ActiveX通道与MATLAB通信。
通过Object.Execute MATLAB语句在程序中直接使用MATLAB提供的函数库和图形库。
这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个MATLAB进程,影响程序运行速度,占用内存。
(2)通过使用嵌入VB的矩阵函数库MatrixVB的方法。
MatrixVB是由原MathTools公司开发的第三方插件,利用与MATLAB相似的函数、语法嵌入到VB中,可以象使用VB的函数、命令一样使用MATLAB函数。
这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入VB语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。
安装后,只需在打开的工程中添加MatrixVB库即可(在工程->引用对话框中选中MMatrix)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
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后使⽤;隔开。
【转】在VS2008中联合使用Matlab编程的技巧一

【转】在VS2008中联合使⽤Matlab编程的技巧⼀在VS2008中联合使⽤Matlab编程的技巧⼀在VS中使⽤Matlab来处理矩阵主要有两种⽅法,⼀种是直接是VS中编程打开Matlab引擎,输⼊Matlab语句,另外⼀种就是将Matlab的m.⽂件编译⽣成dll⽂件,在VS中调⽤该dll⽂件。
⼀、在VS中调⽤matlab⽣成的dll⽂件该实例是基于VS2008和matlab2009a所实现的。
1、Matlab中的设置⾸先在Matlab⾥⾯新建⼀个M⽂件,主要代码为:function[M]=gray_model_test_sonar3(a)%function[M]=gray_model_test_sonar3(a1,a2,a3,a4)%a=[a1;a2;a3;a4];a1=[a(1);a(1)+a(2);a(1)+a(2)+a(3);a(1)+a(2)+a(3)+a(4)];B=[-0.5*(a1(1)+a1(2)),1;-0.5*(a1(3)+a1(2)),1;-0.5*(a1(4)+a1(3)),1;];B = double(B);F=[a(2);a(3);a(4)];C=B'*B;D=pinv(C);%求C的伪逆D = double(D);F = double(F);E=D*B'*F;G=(a(1)-E(2)/E(1))*exp(-4*E(1))+E(2)/E(1);T=(a(1)-E(2)/E(1))*exp(-3*E(1))+E(2)/E(1);M=G-T;end该段代码为使⽤灰⾊模型进⾏预测的基础代码,重点在于Matlab程序必须要包含着functiong和end之间。
将m⽂件保存为sonar3.m,保存在D:\test⽂件件中,然后在Matlab的command window中键⼊:cd D:\test ,在Matlab主窗⼝中将当前路径改为D:\test。
然后设置matlab编译库,以便能够⽣成动态dll⽂件供VS调⽤,在Matlab主窗⼝中键⼊:mbuild -setup会出现:Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers [y]/n?在这⾥我选择的n,得到显⽰:Select a compiler:[1] Lcc-win32 C 2.4.1[2] Microsoft Visual C++ 6.0[3] Microsoft Visual C++ .NET 2003[4] Microsoft Visual C++ 2005 SP1[5] Microsoft Visual C++ 2008 Express[6] Microsoft Visual C++ 2008 SP1[0] NoneCompiler:The default location for Microsoft Visual C++ 2008 SP1 compilers is C:\Program Files\Microsoft Visual Studio 9.0,but that directory does not exist on this machine.Use C:\Program Files\Microsoft Visual Studio 9.0 anyway [y]/n? yPlease verify your choices:Compiler: Microsoft Visual C++ 2008 SP1Location: C:\Program Files\Microsoft Visual Studio 9.0Are these correct [y]/n? y****************************************************************************Warning: Applications/components generated using Microsoft Visual Studio2008 require that the Microsoft Visual Studio 2008 run-timelibraries be available on the computer used for deployment.To redistribute your applications/components, be sure that thedeployment machine has these run-time libraries.****************************************************************************Trying to update options file: C:\Users\Vivian\AppData\Roaming\MathWorks\MATLAB\R2009a\compopts.batFrom template: D:\PROGRA~1\MATLAB\R2009a\bin\win32\mbuildopts\msvc90compp.batDone . . .当出现如上说明,就代表编译器设置完成,接下来使⽤.m⽂件⽣成.dll⽂件在Matlab中,.m⽂件⽣成.dll⽂件的指令如下:mcc -W cpplib:myadd -T link:lib add.m -C其中,myadd是需要⽣成的dll的⽂件名,即⽣成的⽂件名为myadd.dll,add.m是指明通过哪个.m⽂件⽣成dll⽂件的,myadd 和add可以不⼀样。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用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打包程序。