3. 引擎API詳解
在調(diào)用Matlab引擎之前,,首先應(yīng)在相關(guān)文件中加入一行:#include "enging.h",該文件包含了引擎API函數(shù)的說明和所需數(shù)據(jù)結(jié)構(gòu)的定義,??梢栽?/span>VC中調(diào)用的引擎函數(shù)分別如下:
3.1 引擎的打開和關(guān)閉
engOpen-打開Matlab engine
函數(shù)聲明:
Engine *engOpen(const char *startcmd);
參數(shù)startcmd是用來啟動(dòng)Matlab引擎的字符串參數(shù),在Windows操作系統(tǒng)中只能為NULL,。
函數(shù)返回值是一個(gè)Engine類型的指針,,它是在engine.h中定義的engine數(shù)據(jù)結(jié)構(gòu)。
EngClose-關(guān)閉Matlab 引擎
函數(shù)聲明:
int engClose(Engine *ep);
參數(shù)ep代表要被關(guān)閉的引擎指針,。
函數(shù)返回值為0表示關(guān)閉成功,,返回1表示發(fā)生錯(cuò)誤。
例如,,通常用來打開/關(guān)閉Matlab引擎的代碼如下:
Engine *ep; //定義Matlab引擎指針,。
if (!(ep=engOpen(NULL))) //測(cè)試是否啟動(dòng)Matlab引擎成功。
{
MessageBox("Can't start Matlab engine!" );
exit(1);
}
. …………
engClose(ep); //關(guān)閉Matlab引擎,。
3.2 向Matlab發(fā)送命令字符串
engEvalString-發(fā)送命令讓Matlab執(zhí)行,。
函數(shù)聲明:
int engEvalString(Engine *ep, Const char *string);
參數(shù)ep為函數(shù)engOpen返回的引擎指針,字符串string為要matlab執(zhí)行的命令,。
函數(shù)返回值為0表示成功執(zhí)行,,返回1說明執(zhí)行失敗(如命令不能被Matlab正確解釋或Matlab引擎已經(jīng)關(guān)閉了),。
3.3 獲取Matlab命令窗口的輸出
要在VC中獲得函數(shù)engEvalString發(fā)送的命令字符串被Matlab執(zhí)行后在matlab窗口中的輸出,,可以調(diào)用engOUtputBuffer函數(shù)。
函數(shù)聲明:
int engOutputBuffer(Engine *ep, char *p, int n);
參數(shù)ep為Matlab引擎指針,,p為用來保存輸出結(jié)構(gòu)的緩沖區(qū),,n為最大保存的字符個(gè)數(shù),通常就是緩沖區(qū)p的大小,。該函數(shù)執(zhí)行后,,接下來的engEvalString函數(shù)所引起的命令行輸出結(jié)果會(huì)在緩沖區(qū)p中保存。如果要停止保存,,只需調(diào)用代碼:engOutputBuffer(ep, NULL, 0),。
3.4 讀寫Matlab數(shù)據(jù)
3.4.1從Matlab引擎工作空間中獲取變量,。
mxArray *engGetVariable(Engine *ep, const char *name);
參數(shù)ep為打開的Matlab引擎指針,name為以字符串形式指定的數(shù)組名,。
函數(shù)返回值是指向name數(shù)組的指針,,類型為mxArray*(mxArray數(shù)據(jù)類型在本文第4節(jié)詳細(xì)簡(jiǎn)介)。
3.4.2 向Matlab引擎工作空間寫入變量,。
int engPutVariable(Engine *ep, const char *name, const mxArray *mp);
參數(shù)ep為打開的Matlab引擎指針,,mp為指向被寫入變量的指針,name為變量寫入后在Matlab引擎工作空間中的變量名,。
函數(shù)返回值為0表示寫入變量成功,,返回值為1表示發(fā)生錯(cuò)誤。
3.5 調(diào)用引擎時(shí)顯示/隱藏Matlab主窗口
默認(rèn)情況下,,以engine方式調(diào)用Matlab的時(shí)候,,會(huì)打開Matlab主窗口,可在其中隨意操作,。但有時(shí)也會(huì)干擾應(yīng)用程序的運(yùn)行,,可用以下設(shè)置是否顯示該窗口。
int engSetVisible(Engine *ep, bool value);
參數(shù)ep為打開的Matlab引擎指針,,value為是否顯示的標(biāo)志,,取值true(或1)表示顯示Matlab窗口,取值false(或0)表示隱藏Matlab窗口,。
函數(shù)返回值為0表示設(shè)置成功,,為1表示有錯(cuò)誤發(fā)生,。
要獲得當(dāng)前Matlab窗口的顯示/隱藏情況,,可以調(diào)用函數(shù):
int engGetVisible(Engine *ep, bool *value);
參數(shù)ep為打開的Matlab引擎指針,Value為用來保存顯示/隱藏情況的變量(采用指針方式傳遞),。
函數(shù)返回值為0表示獲取成功,,為1表示有錯(cuò)誤發(fā)生。