MatLab和C++的混合编程-VS2010环境下的配置

合集下载

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

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行红色而自体标记部分内容。

C++读写mat文件 VS2010配置

C++读写mat文件 VS2010配置

我的计算机环境是win764位系统,VS2010,matlab R2014a(64位)。

网上也有很多教程试了,很多是不完整的,鉴于此,我重新整理了我的配置过程。

1.VC++目录:VC++目录->包含目录,添加:D:\MATLAB\R2014a\extern\includeD:\MATLAB\R2014a\extern\include\win64VC++目录->库目录,添加:D:\MATLAB\R2014a\extern\lib\win64\microsoft2.C/C++->常规->附加包含目录,添加:D:\MATLAB\R2014a\extern\includeD:\MATLAB\R2014a\extern\include\win643.链接器->常规->附加库目录,添加:D:\MATLAB\R2014a\extern\lib\win64\microsoftD:\MATLAB\R2014a\extern\lib\win32\microsoft4.链接器->输入->附加依赖库,添加:libmat.liblibmx.liblibmex.liblibeng.lib由于所安装的matlab为64位,要调用其函数,需要将工程转换为X645.顶菜单->生成->配置管理器->平台->新建,选择X646.链接器->高级->目标计算机:MachineX64(/MACHINE:X64)7.计算机环境变量->path添加:D:\MATLAB\R2014a\bin\win64D:\MATLAB\R2014a\extern\lib\win64\microsoft。

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是⼀个可执⾏的⼆进制⽂件。

VS(VC)与Matlab联合编程步骤

VS(VC)与Matlab联合编程步骤

联合编程的操作步骤首先,我先说一下我所安装的环境,我的电脑是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。

C与Matlab混合编程

C与Matlab混合编程

VC 2010与Matlab 2010混合编程青岛福沃德电子信息科技有限公司h t t p://w w w.f uw o d.c o m/在最近的项目中,需要用C调用Matlab的函数,在网上找了一些相关的资料,遇到一些问题。

在这里结合一下自己的实现过程,把整个过程整理一下。

1 实验环境Windows 7。

Matlab 2010b,安装路径:E:\Program Files\Matlab\R2010b。

VC 2010,安装路径:C:\Program Files\Microsoft Visual Studio 10.0。

2 Matlab生成DLL2.1 编译器的安装在Matlab中先安装C编译器,当然要先确定电脑里已经安装了相关的编译器。

打开Matlab 2010b,在命令窗口输入mbuild –setup以下是具体命令窗口里的选项选择,当然我只安装了VC 2010的编译器,在编译器选项里只有1个。

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 E:\PROGRA~1\MA TLAB\R2010b\sys\lcc[2] Microsoft V isual C++ 2010 in C:\Program Files\Microsoft V isual Studio 10.0[0] NoneCompiler: 2Please verify your choices:Compiler: Microsoft V isual C++ 2010Location: C:\Program Files\Microsoft V isual Studio 10.0Are these correct [y]/n? y**************************************************************************** Warning: Applications/components generated using Microsoft Visual C++2010 require that the Microsoft V isual Studio 2010 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\BaoQi\AppData\Roaming\MathWorks\MA TLAB\R2010b\compopts.batFrom template: E:\PROGRA~1\MA TLAB\R2010b\bin\win32\mbuildopts\msvc100compp.batDone . . .到这里已经安装了编译器。

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与C#混合编程

Matlab与C#混合编程

本文所使用的环境是VS2010+Matlab2011b,此方法不适合Matlab2010及以下的版本。

本文图比较多,但是按照此步骤走下去,一定可以成功的生成一个可调用的dll文件。

红字部分为特别注意的地方。

示例代码可以在CSDN中搜索用户bqrmt,在资源列表中查找。

生成C#的接口在C#中新建一个类库,如下图所示,工程名最好易识别,本文使用DemoTestInterface修改平台配置,如果使用的项目是x86的,就生成x86,否则就x64。

一定不能AnyCPU。

并且x86的平台只能使用x86的Matlab来生成,x64的必须使用x64的Matlab生成。

如果系统是Win7x64的,Matlab一般是x64的,如果需要生成x86,可以使用VMWare虚拟机添加引用,MWArray.dll,路径为:..\MATLAB\toolbox\dotnetbuilder\bin\win32\v2.0\,由于VS2010并不支持.Net中直接添加,所以需要在浏览选项卡中添加,如下图所示。

如果使用的是VS2008,可以直接在.Net选项卡中找到,MathWorks, .NET MWArray API。

在此选项卡中,按键盘上的“M”,出现的第一个,就是所要的文件。

VS2010中目前未能实现通过此方法添加。

也可以与VS2010一样,在浏览中添加。

添加之后,如下图所示在类文件的头部,添加using,内容如下:using .Arrays;,并修改类类型为Interface和相应的接口名。

并注意接口名与命名空间名不能一样。

如下图所示:添加所需要实现的Matlab函数声明,本例中实现的是两个矩阵的乘法,添加声明,其中MWNumericArray是Matlab与C#的变量转换中间类,在文章第11页有具体细节的解释。

此处,只需要给出主函数的声明,子函数不需要声明。

如下图所示:MWNumericArray MatrixMultiply (MWNumericArray srcMat1, MWNumericArray srcMat2);生成此接口文件,待调用。

MATLAB2012b与vs2010相互调用时的编译环境设置

MATLAB2012b与vs2010相互调用时的编译环境设置

MATLAB2012b与vs2010(vc++9.0)交叉调用时的编译环境设置不会游泳的鱼 于2013年11月在科研和学习中,经常遇到MATLAB运行比较慢,而VC++又需要所有工作都由自己从头做起的情况。

那么,在VC++和MATLAB中进行交叉调用就成为一种能够博采众长的好方法。

但是,如果要实现MATALB 和VC++之间的相互调用,必须要对两者的编译环境进行一些必要的设置。

目前网络上公开的相关资料都是针对旧版本的MATLAB和VC++编译器进行设置,本文依据笔者亲自实验的结果介绍对MATLAB2012b和VS2010进行设置的说明。

考虑到WIN7, 8系统(64位)使用的增加,本文在VS2010中特别标注了x64系统(64位)与x86系统(32位)在设置上的区别。

第一部分:MATLAB 2012b的编译环境设置首先,确保本机已经正确安装MATLAB2012b 和Visual Studio 2010 (旗舰版) 且包含VC++组件(默认版本9.0),并且获得全部使用授权。

其次, 在MATLAB 2012b中安装mbuild组件。

(1)在MATLAB 2012b的命令窗口中键入:mbuild –setup‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Welcome to mbuild ‐setup. This utility will help you set upa default compiler. For a list of supported compilers, see/support/compilers/R2012b/win32.htmlPlease choose your compiler for building shared libraries or COM components:Would you like mbuild to locate installed compilers [y]/n?‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ (2) 键入y并回车,MATLAB会显示当前系统已经安装的C和C++编译器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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++工程,而在项目菜单栏下只是针对当前工程。

这个可以在未来的学习中探索一下。

mex 配置和matlab计算引擎配置都可以用上述方法。

不知如上所说是否正确,只望读者可以作为参考,并希望如发现了错误的同志或有了更深探索的同志可以批评指正。

相关文档
最新文档