Matlab是一款功能强大得仿真软件,要想将其用得更加广泛,或者用到VS中那就需要一种特殊的方法,下面将自己实践的方法一一叙述,当然前提你的电脑要有这两款软件。好了,直接进入主题。

第一步:配置系统环境变量

计算机——>系统属性——>高级系统设置——>环境变量

将内容设置为如图所示:你的Matlab安装路径\bin\win64

                     Matlab2016a与VS2012混合编程

第二步:配置matlab环境

打开matlab,在命令行状态下键入:mex -setup(x和-之间必须有空格,即setup变成紫色) 
然后出现如下提示:

Matlab2016a与VS2012混合编程

以上便将你的matlab设置成为C/C++环境,弹出如上图,说明matlab支持VS2012,可以进行混合编程。

开始实现混合编程:

Matlab:

在工作空间中输入:deploytool,弹出compile窗口,选择Library Compiler;

Matlab2016a与VS2012混合编程

选择Library Compiler弹出如下窗口,选择C++ shared Libary,再点击下图加号添加写好的matlab的函数文件(可以写一个简单的加法函数,如果不会写请百度)。

Matlab2016a与VS2012混合编程

完成后点击绿色的勾,耐心等待转换结束,如下图:

Matlab2016a与VS2012混合编程

转化好的文件夹内容如下图:

Matlab2016a与VS2012混合编程

我们所需要的文件在for_redistribution_files_only中,其为.h;.dll;.lib这三个文件。

第三步:配置VS环境变量

首先建立一个VS C++工程 ,选择Visual C++中的win32控制台应用程序,选择你自己想存放的文件路径和自己想要设置的文件名

Matlab2016a与VS2012混合编程

如此工程建立结束。将matlab生成的for_redistribution_files_only中,其为.h;.dll;.lib文件添加到所建立的VS工程中,我建立的工程名叫AD(我自己乱打的),点开建立的工程后有如下所示的文件夹,将其放到与工程同名的AD文件夹中即可。

Matlab2016a与VS2012混合编程

下面配置开始配置VS:

首先看你的电脑是32位还是64位,改变属性中的内容,我的电脑和matlab都是64位的所以选择x64,如图所示:这一步很关键

Matlab2016a与VS2012混合编程

将属性页中VC++目录中的包含目录设置为:你的matlab安装目录\extern\include

将属性页中VC++目录中的库目录设置为:你的matlab安装目录\exter\lib\win64\microsoft

具体如下图所示:

Matlab2016a与VS2012混合编程

在设置属性页中——>连接——>输入——>附加依赖项      在其中添加一下内容

libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
dec.lib  //这个是你MATLAB所写函数生成的.lib名字

至此结束所有设置。

附上VS中代码:

// AD.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "dec.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
if (!decInitialize())
    {
        return -1;
    }
    int a = 20, b = 10;     // double a = 20.0, b = 10.0;
    int c;                  // double c;
    mwArray mwA(1, 1, mxINT32_CLASS);       // mwArray mwA(1, 1, mxDOUBLE_CLASS);
    mwArray mwB(1, 1, mxINT32_CLASS);       // mwArray mwA(1, 1, mxDOUBLE_CLASS);
    mwArray mwC(1, 1, mxINT32_CLASS);       // mwArray mwA(1, 1, mxDOUBLE_CLASS);


    mwA.SetData(&a, 1);
    mwB.SetData(&b, 1);


    dec(1, mwC, mwA, mwB);
    c = mwC.Get(1, 1);


    cout << c << endl;


    decTerminate();
return 0;
}

相关文章:

  • 2022-02-10
  • 2021-12-04
  • 2022-01-22
  • 2021-12-03
  • 2021-06-11
  • 2021-08-02
猜你喜欢
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
  • 2021-05-25
相关资源
相似解决方案