VS2008和matlab2010混合编程正确配置方法

合集下载

Visual Studio与MATLAB协同编程方法研究

Visual Studio与MATLAB协同编程方法研究

与 MATLAB 协同编程的具体操作方法和详细步 骤,最后通过对比实验过程和实验结果,阐述 3 种方案各自的优点和不足。
1 MATLAB与VS协同编程方法简介
1.1 VS 调用 MATLAB 引擎的方法 MATLAB 引擎是一组 API 函数接口,用户
可以使用这组接口以发送脚本命令的方式调用 MATLAB 中 的 函 数 [4]。 在 具 体 实 例 中,C/C++ 程序作为前端,可以向作为后台的 MATLAB 引 擎 发 送 控 制 命 令,MATLAB 引 擎 根 据 控 制 命 令的种类做出不同的响应。这种方法的实质是 ActiveX 控件调用 MATLAB 进程。 1.2 VS 调用 DLL 文件的方法
摘 要:Visual Studio (VS) 与 MATLAB 协同编程技术充分结合了前者在程序设计方面的灵活性与后者 强大的数学函数库功能,优势互补。然而,该结合在工程实践方面偏弱,不利于两者的大规模应用。 针对该问题,文章基于 VS 与 MATLAB 协同编程的 3 种方案,通过具体实例详细阐述两者协同编程的 实现步骤,分析了 3 种方案各自的优缺点,以期降低初学者的学习门槛。 关键词:Visual Studio; MATLAB;协同编程;DLL 文件;COM 组件
DLL 文件即动态链接库文件,是应用程序的 一部分。exe 程序启动时,与之对应的 DLL 文件 会被调用。MATLAB 自带编译器,用户可以借 助该编译器把已经编写好的 *.m 文件编译为 DLL 文件,然后在 C/C++ 程序中直接使用 DLL 文件 中写好的 MATLAB 函数。
基金项目:河南省教育厅自然科学基金资助项目 (14A520031);河南师范大学博士科研启动课题 (qd14136); 河南 省高等教育教学改革研究项目 (2014SJGLX185, 2015-JSJYYB-016); 河南省教师教育改革项目(2015JSJYYB025); 河南师范大学青年骨干教师基金资助项目 (15018)。 第一作者简介:袁培燕,男,副教授,研究方向为移动机会网络、移动感知、社会计算,peiyan@。

VC与Matlab混合编程

VC与Matlab混合编程

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的混合编程(充分利用二者的优势)

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 与VS2010

Matlab 与VS2010

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一起打包。

visusl C++ 2008 2010 opengl和vbo环境配置

visusl C++ 2008 2010 opengl和vbo环境配置

注:本方法可直接用于配置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混合编程配置设置

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编程的技巧一

【转】在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可以不⼀样。

MATLAB与VisualStudio系列语言混合编程的方法[1]

MATLAB与VisualStudio系列语言混合编程的方法[1]

!’1 利 用 "#$%#& 引 擎 调 用 !"#$"% 引 擎 采 用 的 是 客 户 和 服 务 器 计 算 方 式 。 工
作原理为: !"#$"% 引 擎 作 为 服 务 端 , 16 的 程 序 作 为 前 台 客 户 机 向 !"#$"% 引 擎 传 递 命 令 和 数 据 信 息 , 并 从
@.A !&’3&B "- CBD=/’ 4=’ !&’3&BE6+=&’=CBD=/’FG!&’3&BH"II3./&’.*7GJ
+&Y 、 =7XV2’"++&Y 、 =7XL<&-’+.7X 、 =7XC2’V2’%200=+ 、 =7XU 63*-= 。这 几 个 函 数 在实 现 与 客 户 机 的 交 互 时 用 到 。
应用时, 在 编 译 16 程 序 前 , 要 将 : 个 动 态链接 库
3.B=7XH533 和 3.BAMH533 生 成 静 态 链 接 库 3.B=7XH3.B 和 3.BU AMH3.B 。 使 用 命 令 如 下 :
3.B Z 5=0 : =: [!&’3&B[=M’=+7[.7/325=[ ! H5=0 Z A&/(.7= : .M\] Z *2’ : ! H3.B 。
!
程 序 不 脱 离 "#$%#& 环 境 运 行
在 !"#$"% 中 编 制 的 !"#$"% 是 一 种 解 释 性 语 言 ,
程序源代码为 ! 文件。 在没有接口的情况下, 程 序 不 能脱 离 !"#$"% 环 境 运 行 。 此时, 在 1.-2&3 4’25.* 系 列 语 言 中 对 !"#$"% 实 现 调 用 有 : 种 方 法 : 创 建 "/’.<=> 对 象 和 利 用 !"#$"% 引 擎 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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
这个方法解决了我遇到的问题,也希望能帮助大家解决问题。

相关文档
最新文档