您的位置:首页 > 编程语言 > MATLAB

64位VS2012+64位matlab R2010b和32位VS2012+32位matlab R2010b 使用matlab engine实现混合编程配置

2016-06-25 01:36 766 查看
摘要

本文实现64位VS2012+64位matlab R2010b和32位VS2012+32位matlabR2010b使用matlab engine实现混合编程配置,并用matlab R2010b自带的样例程序进行测试,可以成功运行。并且制作与该文配套是操作视频,下载地址网站:https://yunpan.cn/cRDVTta3636dH,提取码:8b1f。

 本文主要参考文章[1]实现,[1]实现了VS2010与Matlab2010b的混合编程,我们按照该文步骤进行VS2010与Matlab2010b的相关配置,可以成功实现两者混合编程,不过该过程中遇到了[1]中提及的问题“3) 若程序正常运行,但无法打开matlab引擎,则需进行“注册”。”,异常如下图:



该问题是由于Matlab组件没有注册造成的,按照文参考文章中方法“打开cmd,转到目录 MATLAB安装目录\bin,输入matlab /regserver”,问题得到成功解决。接下来,我们首先简单介绍VS和matlab混合编程的相关基础知识,随后,我们按照[1]中的配置方法分别进行64位VS2012+64位matlab R2010b和32位VS2012+32位matlab R2010b使用matlab engine实现混合编程的配置,配置完成后使用matlab
R2010b自动的样例程序“engdemo.c”进行测试,均可以成功运行。

  

1  C 与Matlab混合编程简介

    Visual Studio和Matlab混合编程,有两种方式[2]:①1 Matlab调用C程序;②VS调用Matlab(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能)。前一种是用Matlab的mex命令调用VS或其他编译器,将以一定方式编写出的C文件编译成.mexw32(针对win32)或者.mexw64(针对win64),然后Matlab就可以用调用动态链接库的方式,调用C程序。另一种是反过来,由VS去调用Matlab,因为归根结底,许多底层的代码都依赖于C/C++语言,如果要使用Matlab进行实时的数据处理,那么必然是使用C/C++(从操作系统内核、套接字,或者设备)获取数据,再调用Matlab进行处理。其中,在VS调用matlab有两种方法[3]:a.在C程序中调用matlab引擎;
b. matlab函数编译生成dll文件供C程序使用。

Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,该方法适合个人使用或做演示用[4]。如果需要matlab完成的功能比较通用,如果用前述方法,则会产生大量的重复代码。此时,将对matlab的调用做成一个模块,每次使用时只需调用这个模块就可以了,这样可以简化代码,提高代码效率。首先将需要matlab完成的功能做成一个matlab函数,然后利用mcc命令编译,得到h、dll、lib等文件,在C工程中只需加入上述文件即可[3]。

Matlab外部支持语言编程的文件夹为:(安装目录)\ MATLAB2010b\extern



matlab自带的c例程:(安装目录)\ MATLAB2010b\extern\examples\eng_mat





接下来,依次介绍32位VS2012+32位matlab R2010b使用matlab engine实现混合编程。

  

2  32位VS2012+32位matlab R2010b使用matlab engine实现混合编程配置[b][1][/b]

 安装32位 matlab R2010,安装完成后,我们可以打开matlab R2010查看版本信息,确认我们当前matlab R2010b 为32位版本的,如下图:



这里我们的安装目录为(注意:大家根据自己个人电脑中matlab安装目录进行配置):

E:\MajorSofts\MATLAB\R2010b

环境变量配置目录为:

E:\MajorSofts\MATLAB\R2010b\bin\win32

E:\MajorSofts\MATLAB\R2010b\runtime\win32

需要配置的include头文件目录为:

E:\MajorSofts\MATLAB\R2010b\extern\include

E:\MajorSofts\MATLAB\R2010b\extern\include\win32

需要配置的.lib库文件目录为:

E:\MajorSofts\MATLAB\R2010b\extern\lib\win32\microsoft

需要配置的.lib链接文件为:

 libmx.lib

libmex.lib

libeng.lib

libmat.lib

依次进行以下配置:①配置环境变量;②配置include头文件目录;③配置库文件;④配置链接文件;⑤注册Matlab服务器;⑥运行样例程序。注意:因为这里配置的是32位的VS,所以,在配置头文件、库文件和链接文件时,必须确认选择的是32的编译平台win32。



Step 1: 配置环境变量:选中“我的电脑”,点击鼠标右键后选择“属性”,在弹出的“系统”窗口中选择“高级系统设置”,选择“环境变量”,在“用户变量”或者“系统变量”中的path变量中添加(若没有,则新建变量,命名为path)路径:

E:\MajorSofts\MATLAB\R2010b\bin\win32;E:\MajorSofts\MATLAB\R2010b\runtime\win32

注意:两个目录之间必须要使用英文分号分开

选中“path”,点击“编辑”,在“变量值”中添加环境变量路径后,点击“确定”。



Step 2: 配置include头文件目录,选择“属性管理器”->“VC++目录”->“包含目录”,添加:

   E:\MajorSofts\MATLAB\R2010b\extern\include

E:\MajorSofts\MATLAB\R2010b\extern\include\win32

添加完成后,点击“确定”按键。



Step 3: 配置库文件,在“库目录”中添加:

E:\MajorSofts\MATLAB\R2010b\extern\lib\win32\microsoft

添加完成后,点击“确定”按键。



Step 4: 配置链接文件,在“链接器”->“输入”->“附加依赖项”添加.lib文件:

libmx.lib

libmex.lib

libeng.lib

libmat.lib

添加完成后,按“确定”按键



之后,在“属性页”依次点击“应用”、“确定”按键。

 


 

或者在程序头文件中使用如下语句(注意:两种配置调用.lib文件的方法选用一种即可):

#pragma comment (lib, "libeng.lib")

#pragma comment (lib, "libmx.lib")

#pragma comment(lib, "libmex.lib")

#pragma comment(lib, "libmat.lib")



Step 5: 注册Matlab服务器。利用cmd指令进入到Matlab的安装目录D:
b6df
\MatLab\R2010a\bin下,并运行指令:

matlab\regserver

注册成功后会弹出Matlab命令窗口。如果没有注册成功,使用engOpen()打开Matlab引擎时会失败。

 

Step 6: 运行样例程序。将matlab R2010中自带的样例程序engdemo.c(样例程序可在
(安装目录)
\ MATLAB2010b \extern\examples\eng_mat找到)复制到VS2012工程目录下,并添加到VS项目中运行,执行结果如下:



  

 3 64位VS2012+64位matlab R2010b使用matlab engine实现混合编程配置

对于64位VS2012+64位matlab R2010b使用matlab engine实现混合编程,配置方法与32位的相同,不同是需要安装64位的matlab R2010b软件,在VS中配置头文件、库文件和链接文件时选择64的编译平台X64即可。

1、添加环境变量:

E:\MajorSofts\MATLAB2010b\bin\win64

E:\MajorSofts\MATLAB2010b\runtime\win64

2、 添加include头文件:

E:\MajorSofts\MATLAB2010b\extern\include
E:\MajorSofts\MATLAB2010b\extern\include\win64

3、添加library files:

E:\MajorSofts\MATLAB2010b\extern\lib\win64\microsoft

4、添加.lib文件:

libmx.lib

libmex.lib

libeng.lib

libmat.lib

到“链接器”->“库目录”。或者在程序头文件中使用如下语句:

#pragma comment (lib, "libeng.lib")

#pragma comment (lib, "libmx.lib")

#pragma comment(lib, "libmex.lib")

#pragma comment(lib, "libmat.lib")

5、注册Matlab服务器:cmd,在D:\MatLab\R2010a\bin目录下运行

注册方法:利用cmd指令进入到Matlab的安装目录D:\MatLab\R2010a\bin下,并运行指令:

matlab /regserver

注册成功后会弹出Matlab 命令窗口。如果没有注册成功,使用engOpen()打开Matlab引擎时会失败。

  

参考文献

[1]
VS2010调用matlab2010b引擎

http://www.cnblogs.com/uniquews/archive/2012/12/27/2835923.html 

[2]
VS2013和MATLAB相互调用混合编程

 http://www.cnblogs.com/zhchngzng/p/4131035.html

[3] 在C中调用Matlab  

   http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/
[4] 在VC++中调用Matlab Engine编程

http://blog.sina.com.cn/s/blog_67d069a90100q376.html  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息