VC 编译 MATLAB 的 mex 文件
mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口。在 Windows 环境中,
mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m 程序中直接调用,用户可以通过
234 MATLAB 实用教程
MATLAB 提供的命令“mex”将 C 程序编译成 mex 文件,实现 MATLAB 环境下直接调用或
链接这些程序。mex 文件必须在 C 语言编写后用“mex”命令编译生成,编写时按照 MATLAB
规定的格式和步骤进行,采用 mex 函数库中的函数与 MATLAB 进行交互,从 MATLAB 中获
取数据并返回信息。
本节在讲述 mex 文件系统设置、mex 函数和 mex 文件建立方法的基础上,通过实例说明
VC 编译 MATLAB 中 mex 文件的方法。
11.5.1 mex 文件系统设置
编译和生成 mex 文件,需要安装 MATLAB 应用程序接口组件及 C 语言编译器。在
Windows 环境下编译 mex 文件,编译器必须支持 32 位的 Windows 动态链接库。第一次使用
mex 命令时必须通过命令窗口执行命令“mex –setup”进行适当配置,配置时第一个问题可
选“n”,编译器可选用“Microsoft Visual C/C++ version 6.0”。
11.5.2 mex 函数和 mex 文件
mex-函数是 MATLAB 外部程序的接口函数,以 mex 为前缀,用于实现 mex 文件与
MATLAB 的交互,mexFunction 函数是 mex 文件的核心。
MexFunction 的函数声明如下:
void mexFunction(int nlhs,mxArray *plhs[ ], int nrhs,const mxArray *prhs[ ])
其中,nlhs 为输出变量的个数;plhs 为指向输出变量指针的数组;nrhs 为输入变量的个
数;prhs 为指向输入变量指针的数组。mexFunction 函数中的参数声明是只读的,不能被修改,
MATLAB 调用 mex 程序时自动生成参数 nlhs、plhs、nrhs 和 prhs。
MATALB 中相应函数的调用格式为“[a,b,…]=fun(c,d,…)”,a,b,… 为函数的输出变量,
c,d,… 为函数的输入变量,此时 nlhs 为 a,b,… 变量的个数,nrhs 为 c,d,… 变量的
个数。例如,调用名为 engwm 的文件,可在 MATLAB 的命令行输入“[a,b,c]=engwm(x,y)”,
执行后 nrhs=2、nlhs=3、并创建指针数组 prhs[0]-> x、prhs[1]->y,这时输出变量还没有创建,
指针数组中 plhs[0]、plhs[1]、plhs[2]均指向 NULL。
函数 mexErrMsgTxt 用于显示错误信息,显示完毕后立即终止当前运行的 mex 程序(这
与其他显示函数不同)。其他 mex 函数可参阅 MATLAB 的帮助文档。
下面通过编写显示字符串的程序,说明 mex 文件的建立和使用方法。
(1)编写 C 语言程序代码
VC 中新建文件 good.cpp 并将其保存在指定目录中(如 E:\MEX),如图 11-22 所示。
good.cpp 的代码如下:
#include “mex.h”
void mexFunction(int nlhs,mxArray *plhs[ ],int nrhs, const mxArray *prhs[ ])
{
mexPrintf(“Good Morning!\n”);
}
这里,必须包含头文件 mex.h(该文件包含定义矩阵的头文件 matrix.h 和 mex 函数的声
第 11 章 编译器与外部接口 235
明),mexPrintf 函数(只能用于 mex 程序)与 printf 函数的用法基本相同。
图 11-22 创建文件 good.cpp
(2)编译 good.cpp
打开 MATLAB 平台并将工作目录改为 good.cpp 所在目录 E:\MEX,输入命令“mex
good.cpp”,则在目录 E:\MEX 下生成同名 DLL 程序 good.dll