1. 程式人生 > >[Matlab]VS和Matlab混合程式設計(呼叫Matlab Engine)

[Matlab]VS和Matlab混合程式設計(呼叫Matlab Engine)



原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格

原文連結:https://blog.csdn.net/humanking7/article/details/85934489


文章目錄

VS和Matlab混合程式設計(呼叫Matlab Engine)

看完本文之後,可以看一下這篇文章:VS和Matlab混合程式設計(相關API使用-進階)

環境以及配置

開發環境

  • Window7 x64
  • VS2015
  • Matlab R2013a x64

配置

  1. VS的開發平臺選擇為·x64(因為Matlabx64的)
  2. 新增包含目錄專案屬性->VC++目錄->包含目錄中新增:C:\Program Files\MATLAB\R2013a\extern\include
  3. 新增庫目錄專案屬性->VC++目錄->庫目錄中新增:C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft
  4. (可選)新增依賴項專案屬性->聯結器->輸入->附加依賴項裡,新增三個庫檔案:
    libeng.lib;libmx.lib;libmex.lib; (但是我們可以用#pragma comment(lib,"XXX.lib")命令替代這一操作)

x64

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介面

xiaoguo

q鍵 退出程式,銷燬 Matlab繪圖視窗Matlab Cmd介面

xg2

2.會出現的問題及其解決方案

2.1.編譯連結問題

記住如果你的Matlabx64的,那麼你的VS的編譯平臺一定也要是x64

x64

2.2.環境變數問題

執行時出現問題,解決方案就是:新增環境變數,將``新增到環境變數Path中(根據自己Matlab安裝路徑更改)

環境變數問題

新增環境變數

環境變數


讚賞碼New