【MATLAB和C联合编程】系列教程第4课:MATLAB通过MEX文件调用C/C++程序

创作时间:2021-01-18
标题:
【MATLAB和C联合编程】系列教程第4课:MATLAB通过MEX文件调用C/C++程序

目录:
1.什么是MEX文件,为什么要用它?
2.怎么产生MEX文件?
-2.1 概述
-2.2 产生mex文件具体步骤
3.如何实现“使用MATLAB通过MEX文件调用C/C++程序”?

正文

1.什么是MEX文件?

mex文件是c/c++程序编译后生成的动态链接库。

学习新东西,不了解可以上度娘,下面是我查看的信息,已经标记起来了。
在这里插入图片描述

c/c++程序通过编译可以成为:
(1)MEX文件
(2)动态链接库dll
(3)可执行文件exe
(4)ActiveX组件

这些方式,都是可以被MATLAB调用。
请记住这一段话,这将是我后边章节的纲领,后边我会具体展开讲述

MEX文件是“使用matlab调用c/c++程序”最为常用的手段。

2.怎么产生MEX文件?
-2.1 概述
MATLAB中使用 mex命令,即可将C/C++程序编译为MEX文件。
MEX文件中,包含MATLAB环境可以动态链接装载与执行的动态链接模块,这样我们就可以像在MATLAB中调用m文件一样的调用MEX文件。

在Window平台下,MEX文件以动态链接库的形式存在。根据MATLAB版本不同,扩展名有 dll、mexw32、mexw64.

可以根据mexext命令,可以看出你电脑版本对应的扩展名。
在这里插入图片描述

%matlab命令窗口运行结果:
>> version

ans =

    '9.6.0.1072779 (R2019a)'

>> mexext

mexw64

特别说明:
mex文件不是说就是文件扩展名为mex,它只有3种扩展名,分别为:dll、mexw32、mexw64。根据matlab版本不同,会是这3种的同一种。

-2.2 产生mex文件具体步骤

step1:按照c语言编写代码。
注意添加C语言内置的mex文件的API代码


// demo_mex_hl.cpp


// mexFunction (C) C语言内置的mex文件的API代码
// Entry point to C/C++ MEX function built with C Matrix APIexpand all in page
// //#include "mex.h"
#include  "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,
        const mxArray *prhs[])
{
    
    
    printf("hello world\n");
    
    //防止黑屏一闪而过
    printf("按任意键继续...");
    getchar();
    
}

step2:mex

%matlab命令窗口运行结果:
>> mex demo_mex_hl.cpp
使用 'Microsoft Visual C++ 2017' 编译。
MEX 已成功完成。

在这里插入图片描述

3.如何实现“使用matlab通过mex文件调用c/c++程序”?

调用,前面说了,就像是调用m文件一样,直接调用就是了。

%matlab命令窗口运行结果:
>> demo_mex_hl
hello world
按任意键继续...>> 

补充说明:
如何查看mex文件信息

%matlab命令窗口运行结果:
>> help  demo_mex_hl
demo_mex_hl 是 MEX 文件。

使用help 查不到,那怎么办呢?
方法很简单,既然m文件支持help 查阅,那么我们就搞再搞一个m文件,命名和mex文件一致。
我把它叫做“人为强制孪生”,或者从另一个角度来说,叫“借壳上市”,哈哈,还是很形象的。
在这里插入图片描述

function demo_mex_hl
% demo_mex_hl
% 第一个demo,hello world
end
%matlab命令窗口运行结果:
>> help  demo_mex_hl
  demo_mex_hl
  第一个demo,hello world

果然,如我所愿,成功喽~


THE END~

在这里插入图片描述

【MATLAB-app】系列教程(含视频)00_csdn上第一套关于matlab appdesigner系列“视频课”来啦~~

【图像算法&MATLAB】一文讲明白:图像的直方图均衡化(附作者自编源代码)

【探测器与相机标准】我对图像(图像传感器/相机)“非均匀性”的理解与学习笔记

猜你喜欢

转载自blog.csdn.net/hahahahhahha/article/details/112797973