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