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