环境:

Win10

vs2010

Matlab2015

里面有很多选做的内容,其中2、3必做

1.Matlab环境设置:

  (选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调用Matlab,这步是其他方式调用Matlab中的一步,使用Matlab生成DLL文件,VS引用

要建立独立运行的C应用程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。
Matlab编译器使用mbuild命令可以直接将C/C++源代码编译为独立运行程序,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。
       虽然生成的可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。

在 Matlab 的Command Window 下输入命令。

  mbuild – setup

操作过程如下图:

然后输入命令

mex – setup

以类似的方法配置编译器。Matlab 的配置完成。

2.VS环境设置        (必做)

(1)设置Include 和Library 目录

项目右键->属性->VC++目录->包含目录:添加

<MATLAB>\R2010b\extern\include\win64   我的是:D:\RUANJIAN\Matlab\extern\include\win64

<MATLAB>\R2010b\extern\include\           我的是:D:\RUANJIAN\Matlab\extern\include

项目右键->属性->VC++目录->库目录:添加

<MATLAB>\R2010b\extern\lib\win32\microsoft    我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft

<MATLAB>\R2010b\extern\lib\win64\microsoft

截图:

(2)设置工程目录:      ( 我并没有设置)

项目右键->属性->C/C++->常规->附件包含目录:添加

<MATLAB>\R2010b\extern\include\win64

<MATLAB>\R2010b\extern\include\

项目右键->属性->链接器->常规:添加

<MATLAB>\R2010b\extern\lib\win32\microsoft

<MATLAB>\R2010b\extern\lib\win64\microsoft

项目右键->属性->链接器->输入->附件依赖性:添加  (必做)

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

注:1.lib文件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减

2.附件依赖性在VS2010前以空格隔开,在VS2010后使用;隔开。

截图:

我的截图:

项目右键->属性->链接器->高级->目标计算机:更改(只针对64位WINDOWS)    (选做)

MachineX86 -> MachineX64

注:分析原因为MATLAB根据计算机平台选择了X64编译环境,如此处不修改会出现 错误3

(3)配置管理器设置(只针对64位WINDOWS)                                                 (必做)

生成->配置管理器->平台:更改

Win32->X64

注:分析原因为配合链接器中目标计算机的修改,如此处不修改会出现 错误4

截图:

3.系统(Windows)环境设置   (必做)

   我的电脑->属性->高级系统设置->高级->环境变量->Path,添加:

<MATLAB>\R2010b\bin;<MATLAB>\R2010b\extern\lib\win64\microsoft;<MATLAB>\bin\win64

注:1.Windows7的情况下,“用户变量”和“系统

变量”都需 添加,如不添加,运行时会出现 错误5

2.哈哈,别忘记重启哈,重启后生效

OK!配置就此结束,现在就开始engOpen吧!!对了,别忘记添加#include "engine.h"。

例程:

#include <iostream>

#include "windows.h"

#include "math.h"

#include "engine.h"       //Matlab的头文件

int main ()

{

    const int N = ;

    double x [ N ], y [ N ];

    int j = ;

    for ( int i = ; i < N ; i ++)

    {

        x [ i ] = ( i + );

        y [ i ] = sin ( x [ i ]) + j * log ( x [ i ]);

        j *= -;

    }

    Engine * pEng = NULL ;

    //open engine

    if (!( pEng = engOpen ( NULL ))) 

    {

        std :: cout << "Openmatlab enging failed!" << std :: endl ; 

        system ( "pause" );

        return -; 

    }

    mxArray * xx = mxCreateDoubleMatrix (, N , mxREAL );

    mxArray * yy = mxCreateDoubleMatrix (, N , mxREAL );

    memcpy ( mxGetPr ( xx ), x , N * sizeof ( double ));

    memcpy ( mxGetPr ( yy ), y , N * sizeof ( double ));

    engPutVariable ( pEng , "xx" , xx );

    engPutVariable ( pEng , "yy" , yy ); 

    std :: string evalString = "plot(xx,yy);" ;

    engEvalString ( pEng , evalString . c_str ());

    mxDestroyArray ( xx );

    mxDestroyArray ( yy );

    Sleep (**);

    //close engine                关闭Matlab 

    if ( NULL != pEng )

    {

        engClose ( pEng );

    }

    system ( "pause" );

    return ;

}

效果;

附录:错误情况及解决

2.提示:“libeng.lib libmat.lib"无法打开

解决:附件依赖性在VS2010前以空格隔开,在VS2010后使用;隔开。

3.提示:“  "error LNK2019: 无法解析的外部符号 _interp1Initialize,该符号在函..."”

解决:操作如2.VS环境设置中的(2) 项目右键->属性->链接器->高级->目标计算机:更改...及(3)

4.提示:“  "模块计算机类型“X86”与目标计算机类型“x64”冲突..."”

解决:操作如2.VS环境设置中的(3)

4.提示:“ 系统丢失libeng.dll..."”

解决:操作如 3.系统环境设置

1.mbuild – setup后没有“VS2010”选项
解决:MATLAB 2010b 之后包含对VS2010编译器的支持,2010a及之前版本不包含支持。如果MATLAB环境较低,Matlab官方有一个补丁(http://www.mathworks.com/support/solutions/en/data/1-D5W493/?solution=1-D5W493)

源地址:http://blog.renren.com/GetEntry.do?id=721771317&owner=240190126

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

Visual Studio 与 Matlab实现混合编程的更多相关文章

  1. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  2. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  3. Matlab.NET混合编程调用Figure窗体

    原文:[原创]Matlab.NET混合编程调用Figure窗体 1.前言 做Matlab.NET混合编程好几年了,虽然Matlab很多函数忘记得差不多了,但基本的东西还是能熟练使用.特别是在C#调用M ...

  4. Matlab.NET混合编程技巧之——找出Matlab内置函数

    原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...

  5. C#和MatLab的混合编程(充分利用二者的优势)

    C#和MatLab的混合编程,充分利用了winform的直观显示和matlab的强大计算能力.在此以一个小例子的形式给大家讲述一下二者混合编程的实现. 一.软件的配置说明 C#版本:VS2010:Ma ...

  6. VS2008与MATLAB R2007a混合编程配置过程

    系统平台:windows xp sp2, visual studio 2008 professional, matlab R2007a 首先,为了使matlab 能够找到vs2008编译器,需要下载以 ...

  7. 【原创】Matlab.NET混合编程技巧之找出Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 Matlab与.N ...

  8. matlab c# 混合编程

    MWArray错误: matlab 64位 vs 32位 1. visual studio没有专门的64位版.但32位版可以在64位系统上面正常使用.2.安装VS2010的时候,在安装选项里面,选择了 ...

  9. 基于引擎的matlab+vc混合编程的配置

    前段时间在项目中做了一些关于基于引擎的vc+matlab混合编程的工作. 如果你是混合编程新手,我相信使用引擎的方式编程是比较简单快捷的一种方式. 当然这种方法也有其缺点,就是不能脱离matlab运行 ...

随机推荐

  1. JSON-lib框架,转换JSON、XML不再困难

    Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...

  2. ServerSocketChannel

    Java NIO 中的 ServerSocketChannel 是一个可以监听新进来的 TCP 连接的通道, 就像标准 IO 中的 ServerSocket 一样.ServerSocketChanne ...

  3. LPC2478中断控制器以及串口详解

    LPC2478的中断系统 LPC2478使用的是ARM PrimeCell向量中断控制器,一共支持32个中断向量,处于AHB空间便于系统快速访问,在中断向量的硬件优先级上还有一层可以用户自己设计的软件 ...

  4. DownloadManager 版本更新,出现 No Activity found to handle Intent 的解决办法

    项目中,进行版本更新的时候,用的是自己写的下载方案,最近看到了使用系统服务 DownloadManager 进行版本更新,自己也试试. 在下载完成以后,安装更新的时候,出现了一个 crash,抓取的 ...

  5. 医院his系统数据库恢复

    医院IT系统的重要性堪比金融行业,“银行系统宕机,老百姓不能取钱:医院HIS系统宕机,老百姓不能看病”, 医院信息系统称得上是迄今为止企业级信息系统中最复杂的一类.  某医院HIS系统SQL2008数 ...

  6. 学习笔记::LCT

    今天听见茹大神20分钟讲完了LCT,10分钟讲完平衡树,5分钟讲完树剖,感觉自己智商还不及他一半... 还有很多不懂:2017/1/15 的理解: access是干什么用的? 不知道,只知道他是用来把 ...

  7. UVa 103 - Stacking Boxes

    题目大意:矩阵嵌套,不过维数是多维的.有两个个k维的盒子A(a1, a1...ak), B(b1, b2...bk),若能找到(a1...ak)的一个排列使得ai < bi,则盒子A可嵌套在盒子 ...

  8. PHP文件上传主要代码讲解

    导读:在php开发过程中,文件上传也经常用到,这里简单介绍下. 在php开发过程中,文件上传也经常用到,这里简单介绍下. 代码如下: <?php    if($_FILES['myfile'][ ...

  9. 内容页获取当前栏目的上一级栏目ID

    发现V9在列表页可以用$parentid 得到当前栏目的父级ID,但在内容页这个函数的值却为空了,需要按下面的写法才行, V9 在内容页获取当前栏目的上一级栏目ID {$CAT[parentid]} ...

  10. CSS入门介绍

    一.背景 这里将陆续介绍前端CSS中相关知识,先介绍CSS2.1,后续会介绍CSS3的相关属性,通过该系列的文章,希望能给准备转战前端的人员一些帮助,同时也帮助自己梳理知识,文章中如有错误,欢迎指出. ...