您的位置:首页 > 编程语言 > MATLAB

VC++与Matlab混合编程之引擎操作详解(3)引擎API详解

2012-04-07 09:58 411 查看
3. 引擎API详解

在调用Matlab引擎之前,首先应在相关文件中加入一行:#include "enging.h",该文件包含了引擎API函数的说明和所需数据结构的定义。可以在VC中调用的引擎函数分别如下:

3.1 引擎的打开和关闭

engOpen-打开Matlab engine

函数声明:

Engine *engOpen(const char *startcmd);

参数startcmd是用来启动Matlab引擎的字符串参数,在Windows操作系统中只能为NULL。

函数返回值是一个Engine类型的指针,它是在engine.h中定义的engine数据结构。

EngClose-关闭Matlab 引擎

函数声明:

int engClose(Engine *ep);

参数ep代表要被关闭的引擎指针。

函数返回值为0表示关闭成功,返回1表示发生错误。

例如,通常用来打开/关闭Matlab引擎的代码如下:

Engine *ep; //定义Matlab引擎指针。

if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

{

MessageBox("Can't start Matlab engine!" );

exit(1);

}

. …………

engClose(ep); //关闭Matlab引擎。

3.2 向Matlab发送命令字符串

engEvalString-发送命令让Matlab执行。

函数声明:

int engEvalString(Engine *ep, Const char *string);

参数ep为函数engOpen返回的引擎指针,字符串string为要matlab执行的命令。

函数返回值为0表示成功执行,返回1说明执行失败(如命令不能被Matlab正确解释或Matlab引擎已经关闭了)。

3.3 获取Matlab命令窗口的输出

要在VC中获得函数engEvalString发送的命令字符串被Matlab执行后在matlab窗口中的输出,可以调用engOUtputBuffer函数。

函数声明:

int engOutputBuffer(Engine *ep, char *p, int n);

参数ep为Matlab引擎指针,p为用来保存输出结构的缓冲区,n为最大保存的字符个数,通常就是缓冲区p的大小。该函数执行后,接下来的engEvalString函数所引起的命令行输出结果会在缓冲区p中保存。如果要停止保存,只需调用代码:engOutputBuffer(ep, NULL, 0)。

3.4 读写Matlab数据

3.4.1从Matlab引擎工作空间中获取变量。

mxArray *engGetVariable(Engine *ep, const char *name);

参数ep为打开的Matlab引擎指针,name为以字符串形式指定的数组名。

函数返回值是指向name数组的指针,类型为mxArray*(mxArray数据类型在本文第4节详细简介)。

3.4.2 向Matlab引擎工作空间写入变量。

int engPutVariable(Engine *ep, const char *name, const mxArray *mp);

参数ep为打开的Matlab引擎指针,mp为指向被写入变量的指针,name为变量写入后在Matlab引擎工作空间中的变量名。

函数返回值为0表示写入变量成功,返回值为1表示发生错误。

3.5 调用引擎时显示/隐藏Matlab主窗口

默认情况下,以engine方式调用Matlab的时候,会打开Matlab主窗口,可在其中随意操作。但有时也会干扰应用程序的运行,可用以下设置是否显示该窗口。

int engSetVisible(Engine *ep, bool value);

参数ep为打开的Matlab引擎指针,value为是否显示的标志,取值true(或1)表示显示Matlab窗口,取值false(或0)表示隐藏Matlab窗口。

函数返回值为0表示设置成功,为1表示有错误发生。

要获得当前Matlab窗口的显示/隐藏情况,可以调用函数:

int engGetVisible(Engine *ep, bool *value);

参数ep为打开的Matlab引擎指针,Value为用来保存显示/隐藏情况的变量(采用指针方式传递)。

函数返回值为0表示获取成功,为1表示有错误发生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: