VisualStudio与matlab2016的相互配置 使用c++调用m文件或matlab引擎

Matlab配置visualstudio编译器

向Matlab中输入mex -setup -v命令,并如下图所示进入注册表修改相应部分使相应的“否”变成“是”。

 

  • Microsoft\VisualStudio\SxS\VS7:Visual studio的安装路径
  • Microsoft\VisualStudio\SxS\VC7:Visual studio的安装路径下的VC目录
  • Microsoft\Microsoft SDKs\Windows\v8.0:Microsoft SDKs的v8.0 目录
  • VS110COMNTOOLS:Visual studio的安装路径下的Common7\Tools\目录
其中,VS110COMNTOOLS是环境变量,可以在:我的电脑-->属性-->高级系统设置-->环境变量-->系统变量中修改或添加:
 
Win+R打开运行窗口,输入regedit命令打开注册表编辑器

2.VS配置matlab

 

libmx.lib
libmat.lib
libeng.lib
libmex.lib
mclmcrrt.lib

mclmcr.lib

+m文件生成的lib

注意:与自己电脑系统相对应的bin路径还需要加入到系统环境变量中,我的电脑是D:\MATLAB\R2014a\bin\win64,如下图所示:

另外一定要设置和自己电脑位数相同的平台配置——64位系统要把debug平台改为64位。

3.c++调用matlab引擎

#include"engine.h"

Engine * m_ep;

4.c++调用m文件

Matlab中输入deploytool命令,使用Library Compiler,将m文件写成函数形式使用package编译。将dll,lib文件都放到debug文件夹中,头文件添加到工程中。

注意:m文件必须为函数且输入输出都有必须有赋值,不然会出现闪退现象。

 

以下是调用函数DrawDiamond的代码:

      

 

double a=1;
if( DrawDiamondInitialize())    //初始化DrawDiamond的lib调用,初始化可放在Frame的构造函数中使得框架在创建时就使其初始化
{
mwArray  mw1(1,1,mxDOUBLE_CLASS,mxREAL);      //mw1为1行一列的矩阵
mw1.SetData(&a,1);    //将a赋给mw1
mwArray  mw2(1,1,mxDOUBLE_CLASS,mxREAL);
DrawDiamond(1,mw2,mw1);

 

DrawDiamondTerminate();   //终止DrawDiamond的lib调用

        }

注:if中的条件DrawDiamondInitialize()必须要先调用才能调用编译的函数。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章