[Matlab]VS和Matlab混合程式設計(呼叫Matlab Engine)
阿新 • • 發佈:2019-01-06
原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格
原文連結:https://blog.csdn.net/humanking7/article/details/85934489
文章目錄
VS和Matlab混合程式設計(呼叫Matlab Engine)
看完本文之後,可以看一下這篇文章:VS和Matlab混合程式設計(相關API使用-進階)
環境以及配置
開發環境
Window7 x64
VS2015
Matlab R2013a x64
配置
- 將
VS
的開發平臺選擇為·x64
(因為Matlab
是x64
的) - 新增包含目錄:
專案屬性->VC++目錄->包含目錄
中新增:C:\Program Files\MATLAB\R2013a\extern\include
- 新增庫目錄:
專案屬性->VC++目錄->庫目錄
中新增:C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft
- (可選)新增依賴項:
專案屬性->聯結器->輸入->附加依賴項
裡,新增三個庫檔案:
libeng.lib;libmx.lib;libmex.lib;
(但是我們可以用#pragma comment(lib,"XXX.lib")
命令替代這一操作)
1.程式碼及效果
1.1. 程式碼
#include <iostream>
using namespace std;
#include "engine.h"
//包含目錄 C:\Program Files\MATLAB\R2013a\extern\include
//庫目錄 C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft
//Matlab執行環境變數 C:\Program Files\MATLAB\R2013a\bin\win64
//附加依賴項[下面3行,可以直接在配置中設定]
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmex.lib")
int main()
{
cout << "正在開啟Matlab engine ..."<<endl;
Engine* ep; //定義engine型別指標,往後函式都要用它來指示目標
ep = engOpen(NULL); //啟動函式,成功則返回一個非零值
if (ep == NULL) {
cout << "無法開啟 Matlab engine!"<<endl;
return 1;
}
else
{
cout << "Matlab Engine 啟動成功" << endl;
}
//引號裡為Matlab命令,相當於傳送命令到Matlab裡的命令列控制檯
engEvalString(ep, "x=0:0.1:4*pi");
engEvalString(ep, "y=sin(x);");
engEvalString(ep, "plot(x,y);");
cout << "輸入 q 退出"<<endl;
char quit_flg;
while (true)
{
cin >> quit_flg;
if ('q'==quit_flg)
{
break;
}
}
engEvalString(ep, "close;");//關閉畫圖視窗
engClose(ep);// 釋放記憶體空間,關閉計算引擎
return 0;
}
1.2. 效果
執行後會彈出3個視窗,除了Windows Cmd介面
外,還有 Matlab繪圖視窗
和 Matlab Cmd介面
按q鍵
退出程式,銷燬 Matlab繪圖視窗
和 Matlab Cmd介面
2.會出現的問題及其解決方案
2.1.編譯連結問題
記住如果你的Matlab
是x64
的,那麼你的VS
的編譯平臺一定也要是x64
。
2.2.環境變數問題
執行時出現問題,解決方案就是:新增環境變數,將``新增到環境變數Path
中(根據自己Matlab安裝路徑更改)
新增環境變數