討論VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型
在向大家詳細(xì)介紹VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型之前,首先讓大家了解下某些DLL過(guò)程的同一個(gè)參數(shù)能夠接受多種數(shù)據(jù)類(lèi)型,然后全面介紹VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型。
某些DLL過(guò)程的同一個(gè)參數(shù)能夠接受多種數(shù)據(jù)類(lèi)型。如果需要傳遞多種類(lèi)型的數(shù)據(jù),可 以將參數(shù)聲明為AsAny,從而取消類(lèi)型限制。例如,下面的聲明中的第三個(gè)參數(shù)(lpptAsAny) 既可以傳遞一個(gè)POINT結(jié)構(gòu)的數(shù)組,也可以傳遞一個(gè)RECT結(jié)構(gòu):
- Declare Function MapWindowPoints Lib "user32" Alias _
- "MapWindowPoints" (ByVal hwndFrom As Long, _
- ByVal hwndTo As Long, lppt As Any, _
- ByVal cPoints As Long) As Long
AsAny子句提供了一定的靈活性,但是,由于它不進(jìn)行任何的類(lèi)型檢查,風(fēng)險(xiǎn)也隨之增 加。因此在使用AsAny子句時(shí),必須仔細(xì)檢查所有參數(shù)的類(lèi)型。
正確的函數(shù)聲明是在VB中調(diào)用動(dòng)態(tài)連接庫(kù)的前提,但要想在VB中用對(duì)、用好動(dòng)態(tài)庫(kù)中的函數(shù),僅僅有聲明還是遠(yuǎn)遠(yuǎn)不夠的。前面已經(jīng)說(shuō)過(guò),由于VB不能驗(yàn)證應(yīng)用程序傳遞到動(dòng)態(tài)連接庫(kù)中的參數(shù)值是否正確,因此就要求程序員應(yīng)對(duì)參數(shù)類(lèi)型有非常詳細(xì)的了解,否則很容易引起應(yīng)用程序發(fā)生通用保護(hù)錯(cuò)或?qū)е聺撛诘腂ug,降低軟件的可靠性。
VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型
VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型是指Numeric數(shù)據(jù)類(lèi)型(包括Integer、Long、Single、Double、Currency類(lèi)型)、Byte數(shù)據(jù)類(lèi)型和Boolean數(shù)據(jù)類(lèi)型。它們的共同的特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,操作系統(tǒng)在處理時(shí)不必進(jìn)行特殊的轉(zhuǎn)換。
VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型參數(shù)的傳遞比較簡(jiǎn)單。我們知道,在VB中傳遞參數(shù)的方式有兩種:傳值(Byval) 和傳址(ByRef),缺省的方式是傳址。所謂傳值,就是對(duì)一個(gè)變量的具體值進(jìn)行傳遞;而傳址則是傳遞變量的地址。例如,在VB程序中需要將一個(gè)整型變量m=10的值傳進(jìn)動(dòng)態(tài)庫(kù),如果用傳值方式,那么傳進(jìn)動(dòng)態(tài)庫(kù)的值就是10,而在傳址方式下,傳入的則是變量m的地址,相當(dāng)于C/C++ 中&m的值。需要注意的是,以傳值方式傳進(jìn)動(dòng)態(tài)連接庫(kù)的變量,其值在動(dòng)態(tài)庫(kù)中是不能被改變的;如果需要在動(dòng)態(tài)連接庫(kù)中修改傳入?yún)?shù)的值,則必須使用傳址方式。一般來(lái)說(shuō),在VB 和動(dòng)態(tài)連接庫(kù)之間傳遞單個(gè)的VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型,只要注意了以上幾個(gè)方面就可以了。當(dāng)需要將一個(gè)VB.NET簡(jiǎn)單數(shù)據(jù)類(lèi)型的整個(gè)數(shù)組傳進(jìn)動(dòng)態(tài)庫(kù)時(shí),必須將相應(yīng)參數(shù)聲明為傳址方式,然后把數(shù)組的第一個(gè)元素作為參數(shù)傳入,這樣在動(dòng)態(tài)連接庫(kù)中就得到了數(shù)組的首地址,從而可以對(duì)整個(gè)數(shù)組進(jìn)行訪問(wèn)。例如,聲明了一個(gè)名為ReadArray的DLL過(guò)程,要求傳入一個(gè)整型數(shù)組aArray:
- Declare Function ReadArray Lib "mydll.dll" _
- (aArray As Integer) As Integer
- 在調(diào)用時(shí)可以采用如下方式:
- Dim ret,I(5) as Integer
- … …
- ret = ReadArray(I(0)) '
【編輯推薦】