有的時候,我們在VC里直接實現一個想法比較復雜或者不夠理想,但是使用Matlab可以比較輕松的實現或者實現的效果比較理想,這個時候,我們可以選擇混合編程的方法,將預想功能模塊使用Matlab實現,在將其編譯成供VC調用的DLL,從而更好地實現達到的目標。
**一.基本環境**:
1. Microsoft Visual Studio 2008 SP1(VC++);
2. MATLAB Compiler Runtime;(**MCRInstaller.exe 可在網上下載安裝,已安裝了Matlab的就不需安裝了**)
3. OS:Windows XP。
**二. 基本方法:
1.環境準備:**
?首先值得說明的是,經過不斷的嘗試和搜集資料,發現要想在VC++中調用MATLAB編寫的DLL,必須至少要有MATLAB Compiler Runtime環境,也就是說得先安裝MCRInstaller.exe(約160M),當然,直接安裝MATLAB R2009a(約4.0G)也可以。顯然,如果您僅僅想用VC++調用MATLAB編寫的DLL,安裝MCRInstaller.exe 就足夠了,安裝完之后看一下系統環境變量的Path里是否已經添加了其路徑,如果沒有需手動添加,一般會有的。
**2.調用細節步驟:**
(1)將MATLAB生成的:*.h、*.lib、*.dll 三個文件拷貝到當前項目的目錄下。
(2)設置VC++項目的屬性:
首先,在“配置屬性->C/C++->常規”的“附加包含目錄”中添加MCR的include目錄的路徑,我的路徑是:
C:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\include 。如下圖所示:

其次,在“配置屬性->鏈接器->常規”的“附加庫目錄”中添加MCR的lib庫路徑,我的路徑是:
C:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\lib\win32\ microsoft。如下圖所示:

最后,在“配置屬性->鏈接器->輸入”的“附加依賴項”中添加DLL中和程序中所依賴的lib庫名稱。如下圖所示:

(3)VC++程序中的調用:(**詳細的實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/3677489](http://download.csdn.net/detail/margin1988/3677489)**)
首先,包含所使用到的頭文件,其次,正式調用。例如(我的libdrawAMResults DLL用于繪圖):
~~~
#include "libdrawAMResults.h"
#include "mclmcrrt.h"
#include "mclcppclass.h"
//初始化MCR
if(!mclInitializeApplication(NULL,0) )
{
MessageBox(_T("Could not initialize MCR!"));
}
//初始化lib
if(!libdrawAMResultsInitialize())
{
MessageBox(_T("Could not initialize libdrawAMResults!"));
}
//上面的初始化可以放在程序中的InitInstance()函數中。
try
{
mwArray a(3,3,mxDOUBLE_CLASS);
//double ha[9]={0,0.953,-0.544,1.189,0.177,-0.358,0.358,1.811,-0.358};
//a.SetData(ha,9);
a(1,1) = 0; a(1,2) = 1.189; a(1,3) = 0.358;
a(2,1) = 0.953; a(2,2)=0.177; a(2,3) = 1.811;
a(3,1) = -0.544; a(3,2)=-0.358; a(3,3) = -0.358;
//上面兩種方式初始化mwArray,得到的矩陣才是一樣。
}
catch (const mwException& e)
{
MessageBox(_T("mwException!"));
}
~~~
最后,結果如下:

- 前言
- VC++中自定義熱鍵及響應
- CFileDialog文件對話框
- VC++中客戶區保存為BMP圖片
- VC++讀、寫注冊表
- VC++播放音頻文件和音頻數據的方法
- VC++調用Matlab編寫的DLL(混合編程)
- VC++中文件讀、寫和其他相關操作匯總
- VC++獲取系統當前時間
- VC++按鈕控件字體設置
- VC++軟件界面風格簡單美化
- VC++中一些常用的數據類型之間的相互轉化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及隨機相關
- VC++中結構體的定義及使用
- VC++中List Control控件的使用方法介紹
- VC++中窗口過程函數及其消息發送、響應機制介紹
- VC++中Ribbon編程架構及SDI架構多視圖切換介紹
- 串口通信基礎知識及VC++實現
- VC++中單個鍵盤按鍵的響應
- VC++中的計時器及多媒體高精度計時器
- VC++編寫DLL導出函數及其調用方法
- VC++對話框(CDialog)的全屏顯示及控件居中顯示
- VC++對話框(CDialog)添加背景圖片
- VC++圖片控件(Picture Control)顯示資源位圖(BMP)、文件位圖(BMP)、其它格式文件圖片(JPG\PNG\BMP)的方法
- VC++對Access數據庫的操作(查詢、插入、更新、刪除等)