程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 精通VC與MATLAB聯合編程(七)

精通VC與MATLAB聯合編程(七)

編輯:關於VC++

MATLAB Compiler 是MATLAB自帶的一個編譯器,它能將m文件轉化成 C、C++或p等各種類型的源代碼,並根據需要生成可執行文件、lib文件(庫文件)、dll文件或S函數文件等。MATLAB 6.5 使用的編譯器包括了MATLAB 的C\C++數學庫函數以及圖形庫。動態鏈接庫(dll)是編寫軟件中常用的一種技術,MATLAB提供了將M文件編制成dll文件的方法,本文就介紹如何在MATLAB6.5中將m文件z轉化成dll文件,然後在VC中調用該dll文件。

1、必須保證編譯器的正確配置,因為編譯器使用了C\C++庫函數,所以在使用前需要使用

mex -setup 和

mbuild -setup

兩個命令對編譯器進行配置,如果以前已經進行了配置就不需要這一步。

2、設置頭文件和庫文件的路徑,可以參考 精通VC與MATLAB聯合編程<六>,配置完成如圖1和圖2:

圖1

圖2

讀者根據MATLAB安裝實際情況輸入頭文件和庫文件的路徑。

3、在MATLAB打開文本編輯器(File->New->M-file)寫一個簡單的m函數:

function y=huatu_test()
x=-10:0.1:10;
y=sin(x);
plot(x,y,''*'')

文件保存為huatu_test.m。

4、在MATLAB命令窗口用如下命令生成dll文件和調用dll所需要的文件:

mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m

生成的文件將會保存在當前目錄下,默認的當前目錄為:MATLAB根目錄\work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,這三個文件是我們需要的。

5、在VC中新建一個名為ceshi基於對話框的工程,在工程中添加一個名為"測試"的button按鈕。將dlltest.h 、dlltest.lib和dlltest.dll文件拷貝到當前工程目錄下,並通過Project->Add To Project->Files 選擇拷貝到當前目錄下的三個文件,將文件引入工程。

6、在ceshiDlg.cpp文件中添加頭文件dlltest.h

#include "dlltest.h"

打開dlltest.h文件,裡面有有關函數的定義,找到其中三個函數:

extern mxArray * mlfHuatu_test(void);
extern void dlltestInitialize(void);
extern void dlltestTerminate(void);

從函數意思不難知道它們的作用,dlltestInitialize用來初始化dll庫,dlltestTerminate用來結束調用dll,mlfHuatu_test為主程序執行函數。將三個函數拷貝到button響應代碼中,進行修改:

void CCeshiDlg::OnButton1()
{
dlltestInitialize();
mlfHuatu_test();
dlltestTerminate();
}

編譯、執行程序,點擊結果如圖3:

圖3

可以看出,相比VC編寫dll文件,利用MATLAB 編譯器生成dll文件,以及在VC中調用該dll文件要方便和簡單的多。利用編譯器還可以根據需要生成C\C++源文件,可執行文件等。MATLAB6.5的編譯器為3.0版本,MATLAB7.0的編譯器為4.0版本,4.0版本的編譯器對原編譯器進行了很多改進,3.0很多方法都不再使用,上述方法如果在7.0版本上使用會出現錯誤。

利用mcc命令,通過不同的參數設置可以生成不同的文件,例如:

mcc -B sgl myfun 將myfun.m文件生成對應的c文件和使用c圖形庫的可執行程序
mcc -B sglcpp myfun 將myfun.m文件生成相應的c++文件和使用c++圖形庫的可執行程序
mcc的參數實際上有很多,例如:

mcc -t -W main -L C -T link:exe -h libmmfile.mlib myfun

該命令是將myfun.m生成可執行c程序

為了簡化選項設置,編譯器提供了宏選項,實際上上述命令利用一個參數就可以了:

mcc -m myfun

該命令和上述命令是等價的,也是用來生成可執行c程序。關於mcc命令詳細參數設置可以參考MATLAB幫助文檔。

大家在使用VC調用MATLAB中遇到什麼問題,可以發電子郵件到[email protected],把遇到的問題說清楚,正在寫書,同時有什麼好的建議,也歡迎發郵件來。

關於程序運行的說明:

1、根據實際情況修改VC中頭文件和庫文件的路徑;

2、如果自己編寫的程序圖形不能顯示菜單欄和工具欄,拷貝文件夾bin到當前目錄下

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved