新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > Matlab與C/C++混合編程接口及應(yīng)用

Matlab與C/C++混合編程接口及應(yīng)用

作者: 時間:2012-08-27 來源:網(wǎng)絡(luò) 收藏

3.3 利用mcc 編譯器生成的的DLL 文件

的C++ Complier不僅能夠?qū)?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/Matlab">Matlab的m文件轉(zhuǎn)換為C/C++的源代碼,還能產(chǎn)生完全 脫離運行環(huán)境的獨立可執(zhí)行DLL程序。從而可以在C/C++程序中,通過調(diào)用DLL實現(xiàn)對 Matlab代碼的調(diào)用。下面通過一個簡單的例子說明C/C++調(diào)用m文件生成的DLL:

a.建立m文件example4.m: function result=example4(para)

x=[1 para 3]; y=[1 3 1]; plot(x,y); result=para*2; end.然后在命令窗口中輸入:

mcc -t -W libhg:example4 -T link:lib -h libmmfile.mlib libmwsglm.mlib example4則在工作目錄下會生成example4 .dll、example4 .lib和example4 .h三個文件。

b.在VC中新建一個基于對話框的應(yīng)用程序Test3,然后添加一個按鈕及按鈕響應(yīng)函數(shù),函數(shù)內(nèi)容見d步,再將生成的3個文件拷貝到Test2工程目錄下。

c.VC編譯環(huán)境的設(shè)置如同3.2節(jié)c、d步;

d.在按鈕函數(shù)文件添加如下的頭文件:#include example4 .h ,函數(shù)響應(yīng)代碼為:

mxArray* para=mxCreateDoubleScalar(2); mxArray* result; example4Initialize();

result=mlfExample4(para); CString str;

str.Format(%f,mxGetScalar(result)); AfxMessageBox(str);

e.編譯,連接,執(zhí)行,結(jié)果如圖3所示。

利用mcc 編譯器生成的DLL 動態(tài)連接庫文件,只需在C/C++編譯環(huán)境中將其包含進來, 調(diào)用導(dǎo)出函數(shù)即可實現(xiàn)原m 文件的功能,極大地方便了用戶的代碼設(shè)計。

4 結(jié)束語

本文從Matlab 調(diào)用C/C++代碼和C/C+調(diào)用m 文件兩方面,詳細地研究了Matlab 與C/C++ 技術(shù)。對于Matlab 調(diào)用C/C++代碼,給出了常用的MEX 技術(shù)和調(diào)用C/C++動態(tài)連接 庫的方法,并對它們進行比較。針對用戶在實際中經(jīng)常遇到的C/C++調(diào)用Matlab 問題,通過研究給出了常用的三種方法及其特點:利用Matlab 計算引擎的方法,后的可執(zhí) 行程序脫離不了Matlab 的運行環(huán)境,運行速度很慢;利用mcc 編譯器將m 文件轉(zhuǎn)化為C/C++ 文件的方法,雖然能獨立于Matlab 運行環(huán)境,可在C/C++環(huán)境中包含生成的文件非常繁瑣; 但是m 文件生成的DLL 為用戶提供了一種簡潔方便的C/C++調(diào)用Matlab 代碼的方法。除 Matlab 自帶的mcc 外,Matcom 也能將M 文件編譯為C/C++文件和DLL 文件[2][8],但 原理一樣,在此省略。


上一頁 1 2 3 4 下一頁

關(guān)鍵詞: Matlab 混合編程 接口

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉