C程序调用MATLAB的流程如图3-1所示,计算引擎应用程序与图1.1所示的MEX文件流程正好相反,是以C程序为主体,通过engine接口以后台方式启动MATLAB,并以引擎库函数调用MATLAB。
图3-1 Windows 操作系统下的计算引擎应用程序调用流程
MATLAB引擎库函数以eng为前缀,常用引擎库函数如表3-1所示。各引擎函数简介如下。
表3-1 MATLAB常用引擎库函数
| 序号 | 函 数 | 功 能 |
|---|---|---|
| 1 | engOpen | 启动MATLAB引擎 |
| 2 | engClose | 关闭MATLAB引擎 |
| 3 | engGetVariable | 从MATLAB引擎中获取一个MATLAB矩阵 |
| 4 | engPutVariable | 向MATLAB引擎发送一个MATLAB矩阵 |
| 5 | engEvalString | 执行一个MATLAB命令 |
| 6 | engOutputBuffer | 创建一个存储MATLAB文本输出的缓冲区 |
| 7 | engGetVisible | 获取MATLAB引擎的可见状态 |
| 8 | engSetVisible | 设置MATLAB引擎的可见状态 |
(1) engOpen
Engine *engOpen(const char *startcmd);
参数:startcmd 在windows操作系统下,该参数一般设为NULL。
返回:指向MATLAB engine 的指针。
说明:由于MATLAB引擎在windows操作系统下的通信机制为COM的Server/Client机制,这需要MATLAB在本地计算机上注册MATLAB engine COM Server。注册方法为:在Windows命令行(开始->运行)输入“MATLAB /regserver”即可注册。
(2) engClose
int engClose(Engine *ep);
参数:ep 已打开的指向MATLAB引擎的指针。
返回:操作成功返回0,否则返回1。
说明:操作失败主要是试图再次关闭早已关闭的MATLAB引擎。
(3)engGetVariable
mxArray *engGetVariable(Engine *ep, const char *var_name);
参数:ep 已打开的指向MATLAB引擎的指针;
var_name 欲从MATLAB引擎空间中获取的变量名;
返回:操作成功返回指向新分配的mxArray类型矩阵,否则返回NULL。
说明:在不需使用该矩阵后,用户程序应释放该矩阵内存空间,以免造成内存泄漏。
(4) engPutVariable
int engPutVariable(Engine *ep, const char *var_name, const mxArray *array_ptr);
参数:ep 已打开的指向MATLAB引擎的指针;
var_name MATLAB引擎空间中的变量名;
array_ptr 用户程序中已定义的mxArray类型指针
返回:操作成功返回0,否则返回1。
说明:当MATLAB引擎空间中存在与var_name参数同名的mxArray类型矩阵时,其数据被覆盖,否则,在MATLAB引擎空间中创建以var_name参数为名的mxArray类型矩阵。
(5) engEvalString
int engEvalString(Engine *ep, const char *string);
参数:ep 已打开的指向MATLAB引擎的指针;
string 欲在MATLAB中执行的命令
返回:操作成功返回非零值,否则返回0。
(6) engOutputBuffer
int engOutputBuffer(Engine *ep, char *p, int n);
参数:ep 已打开的指向MATLAB引擎的指针;
p 指向所创建的字符缓冲区指针;
n 缓冲区字节数
返回:操作成功返回0,否则返回1。
说明:engOutputBuffer(ep, NULL, 0)关闭所创建的缓冲区。
(7) engGetVisible
int engGetVisible(Engine *ep, bool *value);
参数:ep 已打开的指向MATLAB引擎的指针;
value BOOL型指针,若ep所指的MATLAB引擎可见,其值为1,否则,为0;
返回:操作成功返回0,否则返回1。
(8) engSetVisible
int engSetVisible(Engine *ep, bool value);
参数:ep 已打开的指向MATLAB引擎的指针;
value BOOL型数值,value=1设置ep所指的MATLAB引擎可见,value=0设置ep所指的MATLAB引擎不可见;
返回:操作成功返回0,否则返回1。
说明:若ep所指的MATLAB引擎可见,则用户可将其用户交互式界面使用。