簡體   English   中英

如何在我的代碼中使用Matlab引擎(用於調用`engOpenSingleUse()`)?

[英]How do I use Matlab engine in my code (for calling `engOpenSingleUse()`)?

我正在嘗試將簡單的字符串命令發送到Matlab引擎。

這是我的代碼(除了#include "engine.h"行之外,我的代碼中的其他任何地方都沒有與Matlab API相關的代碼):

void MatlabPlotter::DrawInMatlab() const
{
    std::string PlotCommand = "x=[0 1 2 3 4 5];y=[0 1 4 9 16 25];plot(x, y);";
    void * vpDcom = NULL;
    int iReturnValue;
    engOpenSingleUse(PlotCommand.c_str(), vpDcom, &iReturnValue);
}

代碼編譯並成功運行,沒有任何編譯器錯誤或運行時錯誤消息。 “Matlab命令窗口”打開; 我得到一個如下屏幕:

空Matlab命令窗口

如您所見,命令窗口為空。 屏幕上沒有繪圖窗口。
當我手動在此窗口中鍵入命令時,我得到的繪圖沒有任何錯誤,如下所示:

手動鍵入命令窗口的命令

這是engOpenSingleUse()函數的官方文檔頁面:
http://www.mathworks.com/help/techdoc/apiref/engopensingleuse.html

我在我的項目中添加了<MatlabInstallationDir>\\extern\\lib\\win64\\microsoft\\libeng.lib庫(我正在編譯x64調試配置)。
我包含了<MatlabInstallationDir>\\extern\\include\\engine.h頭文件。
我輸入了!matlab /regserver命令到主Matlab窗口(如engOpenSingleUse()函數的文檔頁面中所述),以確保Matlab引擎注冊到我的操作系統。

當我調用engOpenSingleUse()函數時為什么沒有發生什么?
當我在PlotCommand對象中發送字符串命令以繪制繪圖時,為什么不彈出繪圖窗口?
我究竟做錯了什么?

操作系統:Windows 7 Ultimate x64 SP1,是最新的
IDE:Visual Studio 2010,(版本10.0.40219.1 SP1Rel)
Matlab:7.8.0(R2009a)

根據您鏈接到的文檔, engOpenSingleUse的字符串參數是“start”命令 - 這不是要執行的MATLAB命令。 engOpenSingleUse只是啟動 MATLAB引擎 - 您必須通過engEvalString調用另一個函數來實際使用引擎

Engine* matlabEngine = engOpenSingleUse(0, vpDcom, &iReturnValue);
engEvalString(matlabEngine, PlotCommand.c_str());

engOpenSingleUse只是意味着它啟動的引擎只能由一個應用程序使用, 而不是它將執行單個命令字符串。

來自文檔:

C語法

#include "engine.h"
Engine *engOpenSingleUse(const char *startcmd, void *dcom,   int *retstatus);

參數:

startcmd用於啟動MATLAB過程的字符串。 在Microsoft Windows系統上,startcmd字符串必須為NULL。

dcom保留供將來使用; 必須為NULL。

retstatus返回狀態; 可能的失敗原因。

僅返回指向引擎句柄的Microsoft Windows操作系統指針,如果打開失敗,則返回NULL。

UNIX操作系統UNIX系統不支持。

為了完整起見,我將提到你還應該檢查以確保engOpen調用在繼續你的程序之前返回了一個非NULL指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM