Visual Basic是Microsoft 公司推出的應(yīng)用廣泛的可視化編程工具,簡(jiǎn)單易學(xué),、功能豐富,,而且能夠設(shè)計(jì)出界面優(yōu)美的應(yīng)用程序;可視化的用戶(hù)界面設(shè)計(jì)功能使程序設(shè)計(jì)人員擺脫繁瑣復(fù)雜的界面設(shè)計(jì),,因而很快就風(fēng)靡全球,。Visual Basic是一種十分強(qiáng)大和有生命力的Windows 編程語(yǔ)言。但是VB語(yǔ)言也有它的缺點(diǎn),,即數(shù)值計(jì)算方面能力欠佳,,因此將其與計(jì)算能力強(qiáng)大的MATLAB混合編程將能體現(xiàn)各自的優(yōu)勢(shì),一般的集成方法我們?cè)谇懊娴恼鹿?jié)中已有介紹,本章將詳細(xì)討論基于MatrixVB的MATLAB與Visual Basic語(yǔ)言的混合編程技術(shù),。
本章主要內(nèi)容如下:
● VB調(diào)用MatrixVB的方法
● VB與MatrixVB的數(shù)據(jù)傳遞機(jī)制
● 混合編程應(yīng)用實(shí)例
7.1 MATLAB與Visual Basic
語(yǔ)言的混合編程方式
MATLAB提供了與C/C++,、Fortran語(yǔ)言的接口,但沒(méi)有與Vsiual Basic語(yǔ)言的接口,,要想實(shí)現(xiàn)MATLAB與Visual Basic的混合編程可以通過(guò)以下途徑來(lái)實(shí)現(xiàn),。
1.通過(guò)ActiveX方式
一是用Visual Basic開(kāi)發(fā)服務(wù)器ActiveX組件,MATLAB作為客戶(hù)端程序使用,,事實(shí)上無(wú)論是用VB還是VC或者其他語(yǔ)言環(huán)境開(kāi)發(fā)的ActiveX組件,,對(duì)于MATLAB來(lái)說(shuō)集成與調(diào)用方式是一樣的,一般情況下很容易地將不同環(huán)境下開(kāi)發(fā)的用途各異的ActiveX對(duì)象集成到一個(gè)MATLAB應(yīng)用中來(lái),。其使用方法見(jiàn)第5章關(guān)于MATLAB作為ActiveX的客戶(hù)端使用方法,。
二是在VB環(huán)境下可以通過(guò)ActiveX自動(dòng)化接口將MATLAB作為Visual Basic語(yǔ)言的一個(gè)ActiveX部件調(diào)用。MATLAB ActiveX自動(dòng)化服務(wù)的功能主要包括在MATLAB工作空間執(zhí)行MATLAB命令,,以及直接從工作空間存取矩陣等,,我們?cè)诘?章中關(guān)于MATLAB作為服務(wù)器組件的部分的例子就是以Visual Basic應(yīng)用程序,以MATLAB作為服務(wù)器客戶(hù)端的,。
2.通過(guò)動(dòng)態(tài)鏈接庫(kù)方式
該種方式是一種間接調(diào)用MATLAB命令的方式,,借助于C++與MATLAB的接口,將MATLAB的程序文件(.M文件)編譯為動(dòng)態(tài)鏈接庫(kù)(.DLL),,VB在代碼中與調(diào)用其他語(yǔ)言編寫(xiě)的DLL文件一樣調(diào)用MATLAB中.M 文件生成的動(dòng)態(tài)鏈接庫(kù),。這種方法可以脫離具體的MATLAB環(huán)境,運(yùn)行效率較高,。
3.通過(guò)嵌入VB的矩陣函數(shù)庫(kù)MatrixVB的方法
MatrixVB是由第三方(mathtools公司)提供的COM組件,,包含了大量與MATLAB相似的函數(shù)與調(diào)用語(yǔ)法,可以加強(qiáng)VB內(nèi)建數(shù)學(xué)運(yùn)算與圖形展示功能,,在VB程序代碼中可以像使用VB自己的函數(shù)一樣使用MatrixVB的函數(shù),,而且可以不依賴(lài)于MATLAB的環(huán)境在Visual Basic中完成矩陣運(yùn)算與圖形繪制顯示等功能,這種方法使用起來(lái)簡(jiǎn)單,,編程效率較高,。MatrixVB函數(shù)庫(kù)的功能大致可分為8大類(lèi)(矩陣運(yùn)算、運(yùn)算符重載,、圖形圖像處理,、最優(yōu)化運(yùn)算、多項(xiàng)式,、信號(hào)處理,、隨機(jī)與統(tǒng)計(jì)分析、控制系統(tǒng)),。
除以上3種方式外,,我們還可以通過(guò)DDE的方式實(shí)現(xiàn)VB與MATLAB的數(shù)據(jù)通信。
7.2 MatrixVB 環(huán)境設(shè)置
7.2.1 在VB應(yīng)用中引入MatrixVB
1.安裝MatrixVB
(1) 系統(tǒng)要求為:
● 硬盤(pán)空間8.8M以上,;
● 操作系統(tǒng)要求Windows 95及其以上版本,,或者Windows NT 4.0及其以上版本。
(2) 在安裝盤(pán)上找到Matrixvb4510.exe,,雙擊后啟動(dòng)安裝程序,,并按照安裝向?qū)О惭b。
(3) 然后在“開(kāi)始→運(yùn)行”菜單中用命令regsvr32 mMatrix.dll注冊(cè),,如圖7-1所示,。
圖7-1 注冊(cè) MatrixVb
2.建立EXE項(xiàng)目
(1) 啟動(dòng)VB開(kāi)發(fā)環(huán)境并建立“標(biāo)準(zhǔn) EXE”項(xiàng)目,如圖7-2所示,。
圖7-2 選擇標(biāo)準(zhǔn)EXE工程模板
(2) 單擊“打開(kāi)”按鈕,,所建立的項(xiàng)目及開(kāi)發(fā)界面如圖7-3所示。
圖7-3 VB項(xiàng)目及開(kāi)發(fā)界面
3. 為項(xiàng)目引入MatrixVB
在project下拉菜單中單擊References,,在彈出的對(duì)話(huà)框中選中MMatrix項(xiàng)目,,系統(tǒng)將加載MatrixVB的動(dòng)態(tài)鏈接庫(kù)MMatrix.DLL,如圖7-4所示,。
圖7-4 引入MatrixVB的動(dòng)態(tài)鏈接庫(kù)
7.2.2 在VB中使用MatrixVB的命令與函數(shù)
1.采用立即窗口的形式
在項(xiàng)目中引入MatrixVB庫(kù)后,,在VB中可以直接在開(kāi)發(fā)環(huán)境的“立即窗口”中輸入MATLAB命令,讓VB編譯器立即執(zhí)行,,如在MATLAB主窗口中一樣,。在View下拉菜單的中選擇Immediate Windows選項(xiàng)在開(kāi)發(fā)環(huán)境中得到“立即窗口”,如圖7-5所示,。
圖7-5 VB中的立即窗口
例如,,在“立即窗口”中輸入如下命令:
A=eye(4,4)
A.show
命令將產(chǎn)生一個(gè)4行4列的單位矩陣,并在MatrixVB的觀察窗口Matrix Viewer中顯示結(jié)果,,如圖7-6所示,。
圖7-6 在VB立即窗口中產(chǎn)生矩陣
或者,在“立即窗口”中輸入命令:
mesh(peaks(3))
將在MatrixVB的圖形窗口Figure1中繪制并顯示一個(gè)曲面網(wǎng)線圖,,如圖7-7所示,。
圖7-7 通過(guò)立即窗口繪制曲面圖
2.在VB程序代碼中使用
可以將MatrixVB的函數(shù)與命令調(diào)用嵌入到VB程序代碼中實(shí)現(xiàn)相應(yīng)的功能,其函數(shù)與命令的使用方式類(lèi)似于在MATLAB環(huán)境中的使用方式,。例如,,我們可以將上例中的功能在VB代碼中實(shí)現(xiàn),步驟為:
(1) 在上例的主窗口中增加一個(gè)按鈕,,如圖7-8所示,。
圖7-8 為窗口Form1增加按鈕
(2) 在按鈕的Click事件處理過(guò)程中產(chǎn)生一個(gè)4行4列單位矩陣并顯示,代碼如下:
Private Sub Command1_Click()
A = eye(4, 4)
A.Show
End Sub
單擊命令按鈕運(yùn)行程序,,運(yùn)行結(jié)果如圖7-9所示,。
圖7-9 VB代碼中用MatrixVB產(chǎn)生矩陣
同樣,在代碼中也可以嵌入MatrixVB繪制圖形的函數(shù)與命令,將該例按鈕的Click事件處理過(guò)程中的代碼進(jìn)行如下修改,。
Private Sub Command1_Click()
mesh(peaks(30))
End Sub
運(yùn)行結(jié)果如圖7-10所示,。
圖7-10 通過(guò)嵌入MatrixVB命令繪圖
在發(fā)布基于MatrixVB的VB應(yīng)用程序時(shí),應(yīng)將相應(yīng)的庫(kù)文件隨系統(tǒng)一起發(fā)布,。這些文件包括:v4510v.dll,、c4510v.dll、ago4510.dll,、msvcrt.dll,、msvcirt.dll和MMatrix.dll。由于MMatrix.dll是COM 服務(wù)器,,所以必須在操作系統(tǒng)中注冊(cè)后方可使用,,注冊(cè)時(shí)可使用如下命令行語(yǔ)句:
regsvr32 mMatrix.dll
如果目標(biāo)操作系統(tǒng)是Windows 95,還必須發(fā)布另外兩個(gè)OpenGL文件即opengl32.dll與glu32.dll,,但在其他操作系統(tǒng)如Windows 98/Me/NT 4/2000等環(huán)境下,,則不需要安裝這些文件。
|