MEX文件模式

MATLAB调用C语言的MEX文件的流程如图2.1所示。

Document Image

图2-1 MATLAB调用C语言的MEX文件的流程图

由图1-1可知,MEX文件的被调用与执行过程中,其内存管理为MATLAB管理机制,调用流程为:

(1) 在MATLAB命令窗口或M文件中调用MEX动态链接子程序,操作流程执行mexFuntion函数,相关数据由MATLAB空间输入至mexFunction函数参数prhs[];

(2) mexFunction函数调用C程序,操作流程执行C程序,相关数据由mexFunction函数输出至C程序;

(3) 执行完C程序后,操作流程返回至mexFunction函数,相关数据由C程序返回至mexFunction函数中;

(4) 在mexFunction函数中,数据传入plhs[],mexFunction执行结束,操作流程返回至MATLAB,相关数据也由mexFunction的输出参数plhs[]返回至MATLAB。

MEX文件编写过程如下:

(1) 以C语言方式编写用户C程序;

(2) 编写MATLAB与 C程序间接口函数mexFunction,并在mexFunction中调用C程序;

(3) 在MATLAB命令窗口中设置编译器和工作路径;

code.matlab
>>mex –setup

MATLAB提示:

code.matlab
Please choose your compiler for building external interface(MEX) files:
Would you like mex to locate installed compilers [y]/n?

输入y确认后,MATLAB提示:

code.matlab
Select a compiler:
[1] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio
[2] Lcc C version 2.4 in C:\MATLAB7\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler:

输入所需的编译器代号即可,由于C程序与C++程序的兼容性,对C语言的MEX文件编译,亦可选用C++编译器,如输入3,MATLAB要求确认所选编译器:

code.matlab
Please verify your choices:
Compiler: Microsoft Visual C/C++ 6.0
Location: C:\Program Files\Microsoft Visual Studio
Are these correct?([y]/n):y

输入y确认后,MATLAB显示本机所设定编译器路径,本机显示为:

code.matlab
Try to update options file: C:\Documents and Settings\Administrator\Application Data\MAThWorks \MATLAB\R14\mexopts.bat
From template: C:\MATLAB7\BIN\WIN32\mexopts\msvc60opts.bat
Done . . .

(4) 编译MEX文件,得到扩展名为.dll的动态链接子程序;

code.matlab
>>mex FileName.c

若编译成功,在MATLAB工作路径窗口中可见FileName.dll动态链接子程序

(5) 在MATLAB中像调用M文件一件调用所得动态链接子程序。