创作时间: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系列“视频课”来啦~~