簡單說明VB.NET自定義類型在API中使用
隨著時代的發展,VB.NET技術也隨著發展,我在前面已經提到過VB.NET自定義類型,這次我用一個簡單的API來說明一個VB.NET自定義類型在API中的使用。VB.NET自定義類型規定了變量傳遞給函數或子程序時必須按引用來傳遞(關于按引用傳遞與按值傳遞,將在以后的文章中做詳細介紹),因此下面這個API的聲明,你會發現和前面所介紹的幾個有少許不同。
- Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
相比上一話中的一個API:
- Public Declare Function GetSystemDirectory Lib "kernel32" Alias
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
可發現參數前面少了個ByVal。如果不加ByVal,或者把ByVal換成ByRef,就是按引用傳遞。POINTAPI不是VB的標準數據類型,它是一個自定義類型。從API瀏覽器中我們得到它的定義原形是這樣的:
- Public Type POINTAPI
- x As Long
- y As Long
- End Type
#T#這里應該引起注意的是,你應該把POINTAPI的定義寫在使用它的函數聲明之前,否則VB會認為你的類型未定義。你也不可以把 x As Long 和 y As Long 的位置對調,如果對調了,在這個API中最多只會使原本 x 的值變成 y 的值,y 的值變成 x 的值,但在更復雜的自定義類型中,結果就不可預知了。這個API的作用是得到鼠標指針在屏幕中的坐標(以像素為單位)。你可以在自己的程序中試驗它,比如:
- Dim tCursor As POINTAPI
- GetCursorPos tCursor
- Debug.Print tCursor.x, tCursor.y
將從調試窗口打印鼠標指針的當前坐標
VB 中的坐標系統比較豐富,有Twip、Point、Pixel、 Character、Inch、Millimeter、Centimeter和User。很復雜吧?在這里我要說的是Twip和Pixel,至于剩下的,由于和本文所說的應用無多大關系,請參考MSDN或相關書籍。