MatlabR2014a+Visual studio 2013 混合编程(都是 64位)

搞了一天终于成功了

Matlab 和 C++ 混编

主要有两种方式 

一   matlib调用 C++

        貌似有 利用MEX技术调用C/C++动态连接库

       

二   VS 调用 matlab  (三种)

       1、调用matlab引擎

     Matlab的引擎库为用户提供了一些接口函数,利用这些接口函数,用户在自己的程序中以计算引擎方式调用Matlab文件。该方法采用客户机/服务器的方式,利用Matlab引擎MatlabC/C++联系起来。在实际应用中,C/C++程序为客户机,Matlab作为本地服务器C/C++程序向Matlab计算引擎传递命令和数据信息,并从Matlab计算引擎接收数据信息。

    特点:

            利用计算引擎调用Matlab的特点是:节省大量的系统资源,应用程序整体性能较好,但不能脱离Matlab的环境运行,且运行速度较慢,但在一些特别的应用[9](例如需要进行三维图形显示)时可考虑使用

       2、利用mcc编译器生成的cpphpp文件

            Matlab自带的C++Complier--mcc,能将m文件转换为C/C++代码。因此,它为C/C++程序调用m文件提供了另一种便捷的方法。

        3、利用mcc编译器生成的DLL文件(主要讲这个

  MatlabC++ Complier不仅能够将Matlab的m文件转换为C/C++的源代码,还能产生完全脱离Matlab运行环境的独立可执行DLL程序从而可以在C/C++程序中,通过调用DLL实现对 Matlab代码的调用

       


    Matlab R2014 安装

        先贴出来下载地址:

                    链接: http://pan.baidu.com/s/1eRurHM6 密码: 8t4i

              博客:http://jingyan.baidu.com/article/c275f6ba218d43e33d7567fd.html(我是按照他的步骤走的,直到安装完,这样并没有完全破解,生成dll时还是有问题,搜索后下载这个,继续替换掉就可以生成dll了这个


)为了减少不必要的错误 安装的时候选择默认安装。

Matlab R2014 已经相当不错了 输入命令就可以直接设置了MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第1张图片

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第2张图片

贴下Matlab测试程序:add.m

      function [a,b]=add(x,y)
                a=2*x+y;
                b=3*y;
       end

输入命令:mcc -W cpplib:add -T link:lib add.m -C

其中 add.m 就是上面的测试程序  cpplib:add 这个add自己可以随意修改,之后会生成add.lib,add.h,add.dll。

 Visual studio 2013 (为了减少错误,默认安装)

链接: http://pan.baidu.com/s/1i4ogWCX 密码: sast

  配置系统环境变量:

用户变量:PATH

C:\Program Files\MATLAB\R2014a\bin\win64

系统变量:Path

C:\Program Files\MATLAB\R2014a\bin\win64

配置完系统变量要从新启动电脑才能生效。

 

新建项目 win32控制台应用程序。

   把add.lib,add.h,add.dll 放到程序目录下:

E:\Code\Matlab_test3\Matlab_test3    Matlab_test3进去之后还会有个Matlab_test3,放到后面的里面。

  调试模式是 debug X64(一定配置X64)

 配置:VC++目录

包含目录:C:\Program Files \MATLAB\R2014a\extern\include
库目录:C:\Program Files \MATLAB\R2014a\extern\lib\win64\microsoft

配置:链接器->输入选项中,附加依赖项

add.lib
libmat.lib
libmex.lib
mclmcr.lib
mclmcrrt.lib
 把 add.h文件添加到 头文件中

add.dll,add.lib文件添加到资源文件中

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第3张图片

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第4张图片

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第5张图片

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第6张图片

代码:

// Matlab_test3.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include"add.h"
using namespace std;
#pragma comment(lib,"add.lib")
int _tmain(int argc, _TCHAR* argv[])
{
    if (!addInitialize())    //初始化,在libmysvd.h中
    {
        cout << "Could not initialize libmysvd!" << endl;
        exit(0);
    }
    mwArray a(1, 1, mxDOUBLE_CLASS);
    mwArray b(1, 1, mxDOUBLE_CLASS);
    a(1, 1) = 20;
    b(1, 1) = 30;
    mwArray x(1, 1, mxDOUBLE_CLASS);
    mwArray y(1, 1, mxDOUBLE_CLASS);
    add(2, x, y, a, b);
    double *i = new double;
    double *j = new double;
    x.GetData(i, 1);
    y.GetData(j, 1);
    std::cout << "x=" << *i << "  y=" << *j << std::endl;
    system("pause");
    return 0;
}

MatlabR2014a+Visual studio 2013 混合编程(都是 64位)_第7张图片





 

    

你可能感兴趣的:(Matlab)