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表示有錯誤發生。