本节以一个简单的C程序为例,说明MATLAB引擎应用开发过程。
///////////// 头文件
#include "engine.h"
#include "stdio.h"
#include "conio.h"
////////////////////// C程序
int main()
{
//////////////打开引擎
Engine *ep;
if((ep=engOpen(NULL))==NULL){printf("\nCan't Open MATLAB engine\n");exit(-1);}
/////////////通过引擎库函数调用MATLAB命令
engEvalString(ep,"x=0:0.1:2*pi;");
engEvalString(ep,"y=sin(x);");
engEvalString(ep,"plot(x,y);");
engEvalString(ep,"xlabel('X');");
engEvalString(ep,"ylabel('Y');");
printf("\n Press anykey to continue\n");
getch();
/////////// 关闭引擎
if(engClose(ep)!=0){printf("\nCan't close MATLAB engine normally\n");exit(-1);}
printf("\n MATLAB engine is over\n");
return 0;}
/////////////////结束
该程序可分四个部分:
(1)头文件,除一般C程序的头文件为,引擎应用程序须包括#include "engine.h"头文件;
(2)在C程序中,调用engOpen()函数打开MATLAB引擎;
(3)在C程序中,通过eng库函数调用MATLAB命令;
(4)在C程序结束之前,调用engClose()函数关闭MATLAB引擎;
与MEX文件编译相似,在编译引擎应用程序之前,需通过mex –setup来指定以不同语言编写的引擎应用程序的编译器。由于各种编译器的设置较为复杂,MATLAB为用户提供了各种编译器的设置参数,称为编译器选项文件,它们存放于%MATLABRoot%\bin\win32\mexopts目录下。在该目录下可以看到,MATLAB为用户提供了从Borland C(从Bcc5.3~Bcc5.6版本)、Fortran(df5.0~df6.6版本)、MSVC(MSVC5.0~MSVC7.1版本)和LCC等十几种编译器的编译选项文件。用户对引擎应用程序的编译,只需以mex –setup指定编译器,并采用与指定编译器相对应的编译选项文件即可。如采用LCC编译器对“eng1.c”的编译过程为:
在MATLAB命令行输入:
>> mex -setup
Please choose your compiler for building external interface(MEX) files:
Would you like mex to locate installed compilers [y]/n?
MATLAB提示用户是否重新指定编译器?输入y确定重新指定编译器,MATLAB列出本机上所安装的编译器及其安装路径,并提示用户选取相应的编译器(以下为MATLAB列出的笔者本机上可用的编译器,共3个)。
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:
输入2指定所采用的编译器为Lcc C version 2.4,MATLAB要求用户再次确认所输入选项。
Please verify your choices:
Compiler: Lcc C 2.4
Location: C:\MATLAB7\sys\lcc
Are these correct?([y]/n):
输入y确认指定Lcc C 2.4为指定编译器。
Try to update options file: C:\Documents and Settings\Administrator\Application Data\MAThWorks\MATLAB\R14\mexopts.bat
From template: C:\MATLAB7\BIN\WIN32\mexopts\lccopts.bat
Done . . .
至此用户指定应用程序的编译器为LCC编译器,相应的编译器选项文件为lccengmatopts.bat。因此,对“eng1.c”的编译为:
>>mex -f c:\MATLAB7\bin\win32\mexopts\lccengmatopts.bat eng1.c
若引擎应用程序无错误,编译成功后,在Current Directory 窗口中可得“eng1.exe”可执行文件。在Windows命令行(开始->运行)输入“D:\MATLAB_C\Engine\eng1”(D:\MATLAB_C\Engine为笔者“eng1.exe”文件存储路径),可以看到,eng1.exe 以后台方式启动MATLAB(图3-2和图3-3),其命令行提示符为?。用户可在该窗口中执行MATLAB各种命令和函数调用。如输入以下命令后,可得图3-4。
? y1=cos(x);
? plot(x,y,x,y1);
? xlabel('X');
? ylabel('Y');
图3-2 引擎程序以后台方式启动的MATLAB命令窗口
图3-3 引擎程序(eng1.c)中执行正弦函数结果
图3-4 用户在MATLAB命令窗口中执行余弦函数结果