写在前面

关于mex, mex类似于DLL,所以可以用C, C++等语言编写,同样的在MATLAB上也可以生成。

在MATLAB上编写MEX适用于那些已经完成了单步调试后的C函数模块,因为MATLAB无法对MEX的源文件也就是C函数进行调试,只会在编译的时候对一些语法错误进行检查,但是对于诸如数组越界之类的内存泄漏问题,MATLAB则无法进行检查。出现这类问题基本就是强退。因此,==最好将C函数模块在VS下调试完成后再利用MATLAB进行后续结果分析,特别是涉及到一些数据处理,比如作图,拟合之类==。

利用VS完成MEX的编写,需要进行一些配置,比如添加头文件,相关的依赖项等。

利用MATLAB编写MEX

1.编译环境设置,选择需要的C/C++编译器

mex -setup

2.编写MEX

#include "mex.h"

void mexFunction(

int nlhs,

mxArray *plhs[],

int nrhs,

const mxArray *prhs[]){

}

在mexFunction函数中,会涉及到输入数据的操作,利用mxGetPr得到数据的指针地址。mxGetM和mxGetN会返回矩阵的行和列(整数)。另外MATLAB的矩阵存储顺序是“从上到下,从左到右”。即A(i,j) = (M + m(j-1) +(i-1))

关于输出数据的操作,主要包括对输出数据分配内存空间,即

plhs[0]=mxCreateDoubleMatrix(m, n, mxREAL); //生成一个mxn的实矩阵

和输入数据一样,同样需要一个指向数据的指针变量

double *a;

A = mxGetPr(plhs[0];

下面给出了一个简单的例子,函数返回两个数的和。

#include "mex.h"

double testAdd(double x, double y){

return x + y;

}

void mexFunction(

int nlhs,

mxArray *plhs[],

int nrhs,

const mxArray *prhs[]){

double *a;

double b,c;

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);

a = mxGetPr(plhs[0]);

b = *(mxGetPr(prhs[0]));

c = *(mxGetPr(prhs[1]));

*a = testAdd(b,c);

}

利用VS编写MEX

1.打开VS,新建项目,选择MFC DLL

2.配置项目属性

C/C++ -> Additional Include Dirrctories 包含目录, 添加==MATLAB安装目录下的\extern\include路径==

Linker -> General -> Additional Library Directories 库目录, 添加==MATLAB安装路径下的\extern\lib\win64\microsoft==

Linker -> Input -> Additional Dependencies 附加依赖项,添加==libmx.lib;libmex.lib;libmat.lib;==

3.创建编辑输出函数 在源文件的路径下新建.def的文件,在文件内写入

EXPORTS mexFunction

在项目属性页的Linker->Input->Module Definition File内加入创建的***.def文件。

另外,更改Configuration Properties->General->Target Extension内容.==mexw64==

4.编写MEX文件 MEX文件编写要求与MATLAB内的一致。

5.VS编译MEX 编写完成后进行BUILD,没有错误在源码上一级的x64文件夹中的Debugw中会生成MATALB MEX类型的输出文件,可以在MATLAB环境下进行验证。

matlab mex教程,MATLAB - VS2017 的MEX开发相关推荐

  1. matlab fdatool教程,[Matlab]Fdatool与s-function c builder的使用

    自从用了Matlab以后,很多事情都交给这款强大的软件进行处理,例如撰写M文件批量处理excel表格数据,数据计算(嗯,其实MathCAD也挺好用,不过更习惯在Matlab中计算)等.今天介绍最近用到 ...

  2. matlab项目实例教程,matlab简明实例教程.doc

    matlab简明实例教程.doc 南京航空航天大学王正盛1MATLAB数学工具软件实例简明教程王正盛编写南京航空航天大学南京航空航天大学王正盛2第一章MATLAB简介MALAB译于矩阵实验室MATri ...

  3. matlab 图 教程,Matlab图形

    本章将继续探讨MATLAB的绘图和图形函数功能.下面将会讨论 - 绘制条形图 绘制轮廓 三维图 绘制条形图 bar命令绘制二维条形图,下面举个例子来演示如何使用. 示例 假设有10名学生,这些学生某次 ...

  4. matlab语音处理教程,Matlab声音处理教程 / 声音处理 / 声音处理教程 / 声音处理软件...

    Matlab声音处理教程 / 声音处理 / 声音处理教程 1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址). 2)使用如下 ...

  5. matlab r2010a教程,MATLAB教程R2010a(十二五)

    第1章 基础准备及入门 1.1 MATLAB的安装和工具包选择 1.2 Desktop操作桌面的启动 1.2.1 MATLAB的启动 1.2.2 Desktop操作桌面简介 1.3 Command W ...

  6. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf

    MATLAB信号处理仿真实验 从观察正弦波开始 用绳量给我的地界 坐落在佳美之处 我的产业实在美好 杜伟韬 duweitao@ 广播电视数字化教育部工程研究中心 2013年 4月23 日于 北京定福庄 ...

  7. matlab nntool教程,Matlab nntool 应用实例教材.doc

    Matlab nntool 应用实例 在MATLAB命令窗口中键入nntool再按enter,会自动弹出下面的Network/Data Manager窗口画面 Inputs:输入值 Targets:目 ...

  8. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

  9. matlab的mex安装,matlab安装使用mex

    gunmex 在 matlab 中的配置(WinGW 和 cygwin) 在 Window xp/7 下使用 Linux 的 C/C++代码,编译成 DLL 供 Matlab 混合编程使用,目前有两个 ...

  10. “Matlab R2016a中运行‘mex -setup’,错误使用 mex 未找到支持的编译器或 SDK”的解决办法

    目录 问题描述: 原因分析: 解决方案: 1.失败经验 2.成功方法 (1)下载MinGW-w64 C/C++ 编译器 (2)安装MinGW-w64 C/C++ 编译器 (3)设置为系统环境变量 (4 ...

最新文章

  1. 通过eclipse调试MapReduce任务
  2. C语言二进制转换为十六进制(附完整源码)
  3. typescript用什么软件写_为什么都2019年了大家还喜欢用TypeScript?
  4. android setGravity()的使用
  5. js中用script 嵌套script块
  6. VB.net编码规范(转帖)
  7. 【python】编程语言入门经典100例--30
  8. 文本特征提取算法-TF-IDF
  9. 三年内人人有FIL,FIL 世界零撸板块引发全球流量狂潮!
  10. Rust: Descending Order
  11. 3-综合案例:月福首页-多媒体-图片热点-框架
  12. c++学习:多线程;顺序容器;智能指针
  13. FUZ-2204-7环形dp
  14. Service Mesh发展历程
  15. win7系统备份还原软件_易数一键还原是一款免费的、功能强大的备份还原软件,支持EFI架构的操作系统和安全启动。...
  16. 海南实现旅游总收入1.06亿元人民币
  17. 对接钉钉审批_钉钉审批对接是什么-和钉钉审批对接相关的问题-阿里云开发者社区...
  18. 计算机管理系统绪论,计算机控制系统绪论.ppt
  19. 面试必问的网络知识,都在这100道题里了(值得收藏)
  20. 隆重推荐:美国也荒唐

热门文章

  1. 制作HP MicroServer Gen8可用的ESXi 5.x SD/TF卡启动盘
  2. ZBrush国庆中秋大放价.....
  3. Docker制作springboot运行应用镜像
  4. 阿里巴巴推出D.Design文生图网站(免费10-20张图)
  5. 拉钩教育的数据分析课程归纳小结:数据分析中的概率统计初步
  6. 英语每日听写练习 Day 15
  7. L1-025 正整数A+B (15分) 题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出A和B
  8. BUUCTF-Crypto-篱笆墙的影子
  9. ecology9.0 主表浏览框控制明细表必填,只读并赋值与清空
  10. linux安全整改项