VC++與Matlab混合編程之引擎操作詳解(2)引擎API詳解

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.