Matlab配置visualstudio編譯器
向Matlab中輸入mex -setup -v命令,並如下圖所示進入註冊表修改相應部分使相應的“否”變成“是”。
- Microsoft\VisualStudio\SxS\VS7:Visual studio的安裝路徑
- Microsoft\VisualStudio\SxS\VC7:Visual studio的安裝路徑下的VC目錄
- Microsoft\Microsoft SDKs\Windows\v8.0:Microsoft SDKs的v8.0 目錄
- VS110COMNTOOLS:Visual studio的安裝路徑下的Common7\Tools\目錄
2.VS配置matlab
libmx.lib
libmat.lib
libeng.lib
libmex.lib
mclmcrrt.lib
mclmcr.lib
+m文件生成的lib
注意:與自己電腦系統相對應的bin路徑還需要加入到系統環境變量中,我的電腦是D:\MATLAB\R2014a\bin\win64,如下圖所示:
另外一定要設置和自己電腦位數相同的平臺配置——64位系統要把debug平臺改爲64位。
3.c++調用matlab引擎
#include"engine.h"
Engine * m_ep;
4.c++調用m文件
Matlab中輸入deploytool命令,使用Library Compiler,將m文件寫成函數形式使用package編譯。將dll,lib文件都放到debug文件夾中,頭文件添加到工程中。
注意:m文件必須爲函數且輸入輸出都有必須有賦值,不然會出現閃退現象。
以下是調用函數DrawDiamond的代碼:
double a=1;
if( DrawDiamondInitialize()) //初始化DrawDiamond的lib調用,初始化可放在Frame的構造函數中使得框架在創建時就使其初始化
{
mwArray mw1(1,1,mxDOUBLE_CLASS,mxREAL); //mw1爲1行一列的矩陣
mw1.SetData(&a,1); //將a賦給mw1
mwArray mw2(1,1,mxDOUBLE_CLASS,mxREAL);
DrawDiamond(1,mw2,mw1);
DrawDiamondTerminate(); //終止DrawDiamond的lib調用
}
注:if中的條件DrawDiamondInitialize()必須要先調用才能調用編譯的函數。