VS2008和matlab2010混合编程正确配置方法
- 格式:doc
- 大小:704.00 KB
- 文档页数:4
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是⼀个可执⾏的⼆进制⽂件。
C#和MatLab的混合编程(充分利⽤⼆者的优势)C#和MatLab的混合编程,充分利⽤了winform的直观显⽰和matlab的强⼤计算能⼒。
在此以⼀个⼩例⼦的形式给⼤家讲述⼀下⼆者混合编程的实现。
⼀、软件的配置说明C#版本:VS2010;MatLab版本:MatLab2011a⼆、制作matLab的C# dll⽂件2.1⾸先写⼀个M⽂件(实现你想要的函数执⾏形式)以⽹上down了⼀个M⽂件(实现基本的绘图功能),内容见下表,function test(h,D)for x=-10:0.1:10,if x>Dy=h;hold on;plot(x,y)elseif x<-Dy=-h;hold on;plot(x,y)elsey=h/(D*x);hold on;plot(x,y)endend2.2 创建制作的dll⽂件的⼯程在MatLab的命令窗⼝中,输⼊deploytool,或者利⽤菜单选项,file-new-deployment project打开创建dll⽂件的⼯程创建窗⼝,如下图所⽰。
在图中,主要分为以下三部分,Name:你想要命名的名字,prj是⼯程的后缀(⼀般不忽略);location:创建⼯程的储存位置;type:针对c#⽽⾔,我们需要选择.net assembly这⼀项;点击Ok选项,⼯程已经创建完毕。
下⼀步就是向⼯程中加⼊你想要的⽅法等元素。
2.3 向所建⼯程中添加对应的元素上述过程中,就相当于在C#中创建了Untitled2的命名空间,需要在此添加对应的类和⽅法。
基于上述的例⼦,下⼀步,我们在窗体菜单中Assembly-点击选择,见下图所⽰。
在上⾯Classes是你⾃⼰对应编写了⼀个类,然后向⾥⾯添加Add files,也就是你之前编写的M⽂件,经过编译之后,就在对应的⼯程⽂件中,形成你所需要的dll⽂件。
下⼀步我们如何在C#中利⽤对应的dll⽂件。
三、如何在C#中利⽤Matlab制作的dll⽂件3.1⾸先,将matlab中对应的刚编写好的untitled的dll⽂件,同时从C:R2011a\toolbox\dotnetbuilder\bin\win64\v2.0中拷贝出MWArrary.dll和Module三个⽂件拷贝到C#编写的⼯程⽂件中去,C#编程⽂件的debug⽂件中。
matlab与VS混合编程脱离MA TLAB运行环境2008-08-15 21:47matlab生成独立可执行的程序一、生成独立可执行的程序(exe文件)步骤1、安装编译器。
可有多种选择,本机安装的是microsoft visual c++ 6.0;2、设置编译器。
在matlab命令行输入mbuild -setup,选择安装的c编译器;3、调用编译器。
输入mcc -m filaname,filaname为要转成exe的m文件;在以前的版本中,用编译命令mcc -B sglcppfilaname;自2006的版本后,替换为mcc -m filaname;4、安装MATLAB7\toolbox\compiler\deploy\win32目录下的MCRInstaller。
二,VS2005与matlab混合编程VS运行环境的设置。
1,针对VS2005运行环境设置。
工具----选项----项目与解决方案----VC++目录:在“显示以下目录内容”的拉框中选择“包含文件”,添加目录:<MA TLAB>\extern\include\在“显示以下目录内容”的拉框中选择“库文件”,添加目录:<MA TLAB>\extern\lib\win32<MA TLAB>\extern\lib\win32\microsoft以上设置将对以后所有VC++工程适用2,对具体工程的一些设置。
项目--<项目名称>属性---,出现属性对话框。
在配置下拉框中选“所有配置”,配置属性----c/c++-------代码生成,在右边的“运行时库”中选取“多线程DLL(/MD)”配置属性----连接器-------输入,在右边的“附加依赖项”中添加相关的lib文件,如:mclmcrrt.lib,libmx.lib.等等。
三,、脱离matlab运行可执行程序MCR是由matlab的运行环境,占用不到400M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。
注:本方法可直接用于配置32位系统下的Visual C++ 2008,64位系统配置完成后运行程序可能会报错,说是glew32.dll文件丢失,这时你重新下载一个此文件(200+k左右的)替换原来的文件即可(好像64位系统要把。
Dll文件拷到system中)
C++2010因为关键字end可能也会出现报错情况,这时你只需把end改为人以别的字符即可(注意:直接用查找替换的方式可能会把endl的end也给替换没了,记得改回来)。
首先将下载的gluw和glut压缩文件解压到任意一个磁盘(建议解压到你安装Visual C++ 2008 的地方),此后添加包含文件和库文件都要用到该地址。
添加库文件和文件是在工具中的选项中的VC++目录
1. 在C++2008中“包含文件”中添加“D:\软件\visual\glut-3.7.6-bin\glut-3.7.6-bin”;
2. 在“库文件”添加“D:\软件\visual\glut-
3.7.6-bin\glut-3.7.6-bin”和“D:\软件\visual\glew-1.7.0-win32\glew-1.7.0\lib”;
3. 将glut32.dll和glew32.dll,glew32mx.dll 拷贝到“C:\WINDOWS\system32”;
4. 将“glew-1.7.0\include”文件夹下的“GL”文件夹拷贝到“D:\软件\visual\VC\include”;
5.计算机系统属性环境变量中添加PATH变量值为“D:\软件
\visual\glut-3.7.6-bin\glut-3.7.6-bin”。
MATLAB与VC混合编程相关配置的设置MATLAB与VC的混合编程中,需要对电脑的“环境变量”和VC的“环境配置”进行设置,然后才可以进行程序的调用。
(1)电脑中“环境变量”的设置:对于win10系统控制面板→系统→高级系统设置→环境变量→系统变量→path中添加D:\softwares\MATLAB\ bin\win64,该路径是MATLAB中dll文件的路径,在path 中添加该路径的目的是让VC在运营时能够读取dll文件。
否则VC在运行时可能会出现“计算机丢失**.dll文件”的情况。
对于win7系统的“环境变量”设置,同样是在path中进行的。
(2)VC的环境配置首先需要建立一个新项目,如MyAdd.cpp。
项目→MyAdd属性→VC++目录→包含目录→D:\softwares\MATLAB \extern\include;项目→MyAdd属性→VC++目录→库目录→D:\softwares\MATLAB\installation document\extern\lib\win64\microsoft。
C/C++→常规→附加包含目录→D:\softwares\MATLAB \extern\include;C/C++→常规→调试信息格式→程序数据库(/Zi);链接器→常规→启用增量链接→是(/INCREMENTAL);链接器→常规→附加库目录→D:\softwares\MATLAB\ extern\lib\win64\microsoft;链接器→输入→附加依赖项→libMyAdd.lib,mclmcrrt.lib,libmx.lib,libmat.lib,mclmcr.lib。
其中在输入时这些lib之间用回车换行。
上述步骤的工作界面如下所示:需要注意:在进行VC与MATLAB混合编程的过程中,用到的环境是32位还是64位,在这里需要是相同的编程环境才可以相互调用,如:上图中如果是x32,则需要点击“配置管理器”进行重新设置。
【转】在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可以不⼀样。
3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。
1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。
其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。
二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。
MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。
2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。
这种方法可以脱离具体的MA TLAB环境,运行效率较高。
3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
联合编程的操作步骤首先,我先说一下我所安装的环境,我的电脑是Win7(X64)的,我安装的Matlab是Matlab R2010b和VS2010,还有Matcom4.5我Matlab的安装目录:C:\Program Files\MATLAB我VS的安装目录:F:\Program Files (x86)\Microsoft Visual Studio 10.0一、Matlab环境配置在Matlab的Command Windows下输入命令:mbuild -setup然后输入命令:mex–setup 方法同上mbuild–setup一样。
在Matlab中编写想要实现的.m文件。
我以最简单的.m文件为例:function [c]=Myadd(a,b)c=a+b;在命令窗口编写:会在当前目录下生成如下图中显示的文件:其中重点会用到的是.cpp、.h、,dll、.lib文件。
在头文件的最后,你可以看到下面的内容:externLIB_myadd_CPP_API void MW_CALL_CONV myadd(intnargout, mwArray& c, constmwArray& a, constmwArray& b);这就是myadd的C函数的声明。
nargout表示输出变量的个数,其他就是对应了m函数的几个变量。
二、Matcom设置准备工作在Matcom中编写函数文件:保存后,点击compile to DLL,生成DLL文件默认在matcom安装目录debug 文件夹下面。
会生成如下图所示的文件:主要用到的还是.dll、.h、.lib等文件。
不过在VS中调用时,需要将matcom安装目录lib文件夹下的matlib.h和v4501.lib拷贝到工程文件夹下。
并且要将翻译生产的文件(.dll、.h、.lib等文件)也复制粘贴到工程目录下。
且在stdafx.h中要包含matlib.h。
MatLab和C++的混合编程VS 2010环境下的配置这几天颇费了一点精力研究matlab和C++如何混合编程,曲折坎坷,终于实现了VS2010的配置,现参照前人经验,基于自己实际情况,总结如下:1.VS的配置新建一个工程,打开视图->其它窗口->属性管理器。
就会在左侧出现如下窗口,展开工程,展开Debug|Win32,双击er,出现如下窗口:在VC++目录一栏里选择包含目录:添加如上图的include路径;库目录:添加如上图的microsoft路径;然后点击C/C++栏,常规选项:在附加包含目录下选择:如上图include路径;然后点链接器:常规:附加库目录:如图所示;连接器:输入选项:附加依赖项:输入libeng.lib;libmat.lib;libmex.lib;libmx.lib 注意:在四个附加项之间一定要用“;”隔开,否则运行的时候是无法打开的,这是和VS以前版本所不同的。
我的主要问题也就是出在这里。
附图如下:2.计算机的配置右键我的电脑->属性->高级系统设置选择高级选项卡->环境变量在系统变量里新建“matlab”变量,值为matlab安装路径。
在Path变量里添加D:\MATLAB R2012a\bin\win32路径。
如下图:这样就配置完成了,不过在matlab里还要配置默认编辑器。
在这里不做说明,网上例子很多。
说一下我自己对这个配置的理解:试看所加目录,如D:\Matlab R2012a\extern\include,这就是c++的头文件所可以包含的文件夹,D:\matlab R2012a\extern\lib\win32\microsoft,这就是C++里调用matlab的函数抑或是matlab的外接函数库。
再说一点,这个属性页可以在很多地方打开,如可以再解决资源管理器里右击工程,属性,也是同样的页面,在项目菜单栏下选择所建工程的属性也是可以的,但是据说在如上所说的地方打开或是在解决资源管理器打开配置可以针对未来所有的C++工程,而在项目菜单栏下只是针对当前工程。
我用的matlab版本是matlab R2010a,VS的版本是20008(V9.0),下面以plot 的调用为例说明通过动态库方式实现这两个环境下C++和matlab的混合编程。
一、设置matlab编译环境1、在matlab命令窗口键入mbuild –setup,然后回车接下来会问要不要选择编译器,选择y;然后选择相应的编译器,这里是vs 9.0。
然后确定以上输入的信息是否正确,这里可以填写cd(prefdir);mccsavepath;。
(我估计选y也可以)。
这样mbuild的设置就完成了。
2、在命令窗口键入mex –setup,然后回车。
设置mex,mex的设置和mbuild一样,这里不赘述。
二、在VS2008下建立MFC工程和在matlab下编写.m文件1、下面是编写的.m文件的代码:function MyFunction(x, y)plot(x, y);end只是简单的实现了对传进来的数据的plot()函数。
.m文件编写完成之后要对其进行编译,前面我们已经将matlab编译器设置好了,我们用“mcc -C -W cpplib:libfile -T link:lib MyFunc tion.m”的命令对.m 文件进行编译,其中libfile是生成的.h文件、.lib文件、.ctf文件和.dll文件的文件名。
编译后会生成很多文件我们需要的是.h文件、.lib文件、.ctf 文件和.dll文件。
2、下面是MFC程序调用plot函数的代码:#include "libfile.h"……void CmixMFCmwDlg::OnBnClickedButton1(){libfileInitialize();int Num = 30;mwArray x(1,Num,mxDOUBLE_CLASS);mwArray y(1, Num, mxDOUBLE_CLASS);for(int i = 1; i <= Num; i++){x(1, i) = i;y(1, i) = 2 * i;}MyFunction(x, y);libfileTerminate();}一定要记得#include "libfile.h"。
«上一篇: 使用VC和MA TCOM结合开发应用程序心得笔记下一篇: [转帖]MATLAB 与C 语言的接口(多篇) »Matlab和Visual C++接口中编译环境的配置Usernameg @ 2004-06-02 10:09原作者姓名三剑侠正文Matlab是美国MathWorks公司推出的一种以矩阵为基本编程单位的高效数值计算语言,是一个集科学计算、图像处理、声音处理于一体的高度集成系统。
Matlab为用户提供了丰富的Windows图形界面设计方法,使用户能够在利用其强大数值计算功能的同时设计出友好的图形界面。
在编程效率、可读性、可移植性和可扩充性上,Matlab远远优于其它高级编程语言。
由于利用Matlab能够设计出功能强大、界面优美、性能稳定的高质量程序,它受到了越来越多用户的欢迎,成为了当今国际上最流行的控制系统计算机辅助设计的软件。
然而作为一种以解释方式运行的高级计算机语言,Matlab程序的执行效率较低。
为了解决这一问题,MathWorks公司提供了Matlab和C的接口,通过接口,用户就能在C程序中调用Matlab中的函数,从而实现既能拥有Matlab强大的数值计算功能又能享受高度执行效率的愿望[2]。
MathWorks公司提供的Matlab和C的接口方式共有3种:(1)将Matlab程序编译成MEX文件、C或C++文件;(2)在C、C++程序中利用Matlab Engine调用Matlab 函数;(3)在C、C++程序中利用Matlab C Math Library或Matlab C++Math Library调用Matlab函数。
其中通过方式(1)、(2)生成的程序只有在安装了Matlab系统上才能正常运行,而由方式(3)生成的程序则没有这样的要求,它能够以独立执行程序的形式运行,即使在客户没有安装Matlab系统下。
方式(3)唯一的缺点就是不能利用Matlab中丰富的图形句柄处理函数,但是对于Visual C++等开发工具而言,这不是一个很严重的问题。
VS2005如何调用Matlab7定义的.m文件中的函数以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件. 与Matlab6.5稍有不同。
(一)先建立matlab的m文件这里为了简单起见,我在matlab中定义了一个求和函数,其m文件如下:function y = add_zh(a,b)y=a+b保存为myadd.m(二)对matlab编译环境进行设置为操作系统添加环境变量:在环境变量(我的电脑->右键->高级)path中加入<MATLAB7_root>\bin\win32打开matlab,在命令行状态下键入:mex -setup然后出现如下提示:--------------------------------------------------------------------------------------Select a compiler:[1] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)[2] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)[3] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 SP1 linker)[4] Lcc-win32 C 2.4.1[5] Microsoft Visual C++ 6.0[6] Microsoft Visual C++ .NET 2003[7] Microsoft Visual C++ 2005 SP1[8] Microsoft Visual C++ 2008 Express[9] Microsoft Visual C++ 2008 SP1[10] Open WATCOM C++[0] NoneCompiler:--------------------------------------------------------------------------------------这里我们选择'7’。
matlab与vc混合编程1、环境设置在桌面上右键单击“我的电脑”图标出现以下菜单单击“属性”菜单项,出现“系统特性”对话框,单击“高级”选项卡,如下图所示在上图中,单击“环境变量”按钮,出现“环境变量”对话框,添加系统变量 matlab 值为 D:\MATLAB 即 matlab 的安装路径,如下图所示在环境变量 path 中加入 D:\MATLAB\bin\win32 ,如下图所示按“确定”完成设置后,重启计算机或注销当前用户,即可应用新设置。
2、matlab 编译器设置(1) mex 命令设置(a) 运行 matlab ,在 matlab 的命令窗口 (Command Window) 键入“ mex -setup ”命令后,按回车键,安装 matlab 编译器;(b) 命令窗口出现如下提示mex -setupPlease choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?此时键入”y”,按回车;(c) 命令窗口出现如下提示Select a compiler:[1] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio[2] Lcc C version 2.4.1 in D:\MATLAB\sys\lcc[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio[4] Open WATCOM C/C++ version 1.3 in D:\Maple11[0] None此时键入”3”,按回车;选择 Microsoft Visual C++6.0 的编译器(d) 命令窗口出现如下提示Please verify your choices:Compiler: Microsoft Visual C/C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n):此时键入”y”,按回车;确认选择 Microsoft Visual C++6.0 的编译器(2) mbuild 命令设置(a) 运行 matlab ,在 matlab 的命令窗口 (Command Window) 键入“ mbuild -setup ”命令后,按回车键,安装 matlab 编译器;(b) 命令窗口出现如下提示mbuild -setupPlease choose your compiler for building standalone MA TLAB applications:Would you like mbuild to locate installed compilers [y]/n?此时键入”y”,按回车;(c) 命令窗口出现如下提示Select a compiler:[1] Lcc C version 2.4.1 in D:\MATLAB\sys\lcc[2] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Stu dio[0] None此时键入”2”,按回车;选择 Microsoft Visual C++6.0 的编译器(d) 命令窗口出现如下提示Please verify your choices:Compiler: Microsoft Visual C/C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n):此时键入”y”,按回车,确认选择 Microsoft Visual C++6.0 的编译器,编译器设置完成。
VS与MATLAB混合编程一、VS与MATLAB混合编程两者联合调用方法有三:1、调用MATLAB引擎;2、调用MATLAB中M函数转化成的DLL文件;3、调用MATLAB中M函数转化成C语言的函数。
比较之后选择方法1,故在VS的IDE平台下调用MATLAB引擎;二、编译器配置1、MATLAB属性配置(1)打开MATLAB主界面,在命令窗口中编辑命令;(1.1)在MATLAB中输入命令mbuild -setup, 运行结果如图1所示,按照提示选择编译器VS2010。
图1在上面弹出界面中选择继续输入y,点击回车键,弹出两个选项,按照提示输入1,运行结果如图2所示,继续选择输入y。
图2(1.2)在MATLAB中输入命令mex -setup , 运行结果如图3所示,按照提示选择编译器VS2010。
图3在上面弹出界面中选择继续输入y,点击回车键,弹出两个选项,按照提示输入1,运行结果如图4所示。
图4就这样,MATLAB配置完成。
2、VS2010属性配置(2.1)打开VS2010的主界面,选择新建项目,项目名称自定义(暂为plot2);添加头文件以及源文件,分别为plot2.h和plot2.cpp,如图5所示。
图5(2.2)点击plot2项目右键,选择属性编辑框,弹出界面如图6所示。
其中,在配置管理器中选择该项目的活动平台(win32、x64),就个人使用电脑的属性选择,如若不正确选择活动平台会出现error lnk2019:无法解析的外部符号等一系列错误。
图6(2.3)VS2010路径的包含a、在项目属性页中选择配置属性中的VC++目录,在以下两个目录中添加路径。
包含目录:添加D:\matlab 2012b\extern\include;库目录:添加D:\matlab 2012b\extern\lib\win64\microsoft图7VC++目录添加如图7所示,目录添加完后点击确定保存。
b、选择C/C++中的常规,添加附加包含目录:D:\matlab 2012b\extern\include;如图8所示。
第一步:安装软件(1)首先安装Visual Studio 2005或者更高版本(2)接着安装Matlab;(否则,先安装matlab会提示,电脑上必须装有.net Framework)(3)最后安装,MCRInstall.exe。
1)通过在matlab命令窗口输入mcr命令,得到MCRInstall.exe的路径,然后双击打开并安装。
2)安装MCRInstall.exe时,下面的界面是在抽取文件(处于安装等待状态),还没有安装,所以不要点击取消。
3)另外,安装完MCRInstall.exe之后,关于设置环境变量的问题。
这个时候,环境变量已经自动设置好了。
不用按照下面的设置去设置:不过,可以按照下面的方法,去看看环境变量是否设置好点击:我的电脑-属性-高级-环境变量-系统变量-PATH-编辑,在变量值输入框中,不要删除以前的字符串,在最前面加入MCR的安装路径,如:D:"Program Files\MATLAB\MATLAB Compiler Runtime\v80\bin\win32; 然后确定、保存、重启电脑。
(我就是不知道需要这两步,老是在C#创建Matlab的访问对象时,出现:“xxx的类型初始值设定项引发异常。
”完全不理解是什么原因,被耽搁了大量时间,直到安装了Matlab 2008b,仔细阅读它生成的readme.txt才知道)第二步:mbuild编译器设置在matlab的Command window中输入mbuild -setup显示如下(1)Would you like mbuild to locate installed compilers [y]/n? y这个时候选择y,如果正常的话。
就可以出现编译器。
(2)如果没有出现,只能手动设置编译器。
这个时候,需要选择n。
具体可以参考关于利用C#和Matlab进行交叉编译混合编程(一).htm具体混合编程实际项目,(第三步至第五步),可以参考以下网页内容,C#调用MatLab实现N阶幻方第三步:编写m文件:function y=mymagic(x)y=magic(x);第四步:建立VS项目:在matlab中点击“File- new -Development Project” 自己选择项目保存目录和项目名,如E:"和magicpro.prj 类型选择.NET Component,如果你要生成更通用的COM组件,选择Generic COM Component。
VS2008调用matlab引擎正确配置方法
要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。
具体的说,打开一个工程后,做如下设置:
1) 通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:"D:\Program files\MATLAB\R2010a\extern\include"。
2)选择“库文件”,添加路径:
d:\Program Files\MATLAB\R2010a\extern\lib\win32\microsoft。
以上步骤1)、2)只需设置一次,因为是对VS2008整体工作环境的设置。
3) 右击工程/属性,打开项目属性页,选择链接器/输入,在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。
4)如此设置后,能够正常编译,但运行时报错说找不到dll文件,如下
而libmx.dll是存在于D:\Program Files\MATLAB\R2010a\bin\win32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:\Program Files\MATLAB\R2010a\bin,故系统不会自动到其子文件中找dll,从而报错说找不到文件,这也解释了为什么旧版本的Matlab无此问题,因为可能旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。
所以只要在系统变量中包含路径D:\Program Files\MATLAB\R2010a\bin\win32即可,如下图。
如果以上设置完成后,运行仍报错,可以尝试将VS2008关掉再启动,我就是这样,环境变量设置好后,仍然报错,重启电脑也解决不了问题,后尝试关掉工程,再启动运行就OK了!
再次感谢博主:/s/blog_6163bdeb0100qd49.html
这个方法解决了我遇到的问题,也希望能帮助大家解决问题。