詳談VB自定義類型參數的傳遞
本文向大家介紹VB自定義類型參數的傳遞,可能好多人還不了解VB自定義類型參數,沒有關系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
VB自定義類型參數的傳遞
用戶自定義類型在VB中是一種重要的數據類型,它為編程者提供了很大的靈活性,使開發人員可以根據需要構造自己的數據結構。它相當于C/C++中的結構類型(structure)。在VB中,允許程序員以傳址的方式將自定義數據類型參數傳入動態庫,DLL過程也可以將修改后的參數返回VB程序。但是,在VB中仍然不支持以傳值的方式傳遞VB自定義類型參數。
傳遞VB自定義類型參數時,必須確保VB中的數據類型的成員與動態庫中的結構成員是一一對應的,所占空間也必須嚴格一致。這里所說的一一對應,不僅是指VB 中的所有結構成員在動態庫的結構中都必須有對應的元素,而且它們在數據結構中定義的順序也必須嚴格一致,這是VB中使用的"數據結構成員對齊方式"決定的。在VB 中,數據結構使用雙字對齊方式(4-byte alignment),因此,在用戶自己生成用于VB調用的動態連接庫時,也必須把編譯選項"structure member alignment" 設為4字節(如前文所述)。
所謂結構成員對齊方式是指一個數據結構內部,其成員的排列方式。譬如,在VB中,其對齊方式是4字節,這就好象在一個數據結構內部分成了很多個4字節大小的小單元,如果相鄰兩個或多個數據成員的大小可以放在一個單元中,那么就放在一起;否則這些小單元中可能 會出現未用的空字節。我們來看下面一個數據類型:
- Type TestType
- m1 as Integer
- m2 as Byte
- m3 as Long
- End Type
它的三個成員的大小加起來是2+1+4=7。但是,由于m1和m2的字節總長度是3,小于 4,它 們就存放于一個單元中;但該單元剩下的一個字節不足以放下一個Long型的成員m3,于是m3 就被放在下一個單元中,它們之間就有了一個未用的空字節;因此,整個結構所占實際長度是8 字節。同理,如果將m3和m2的位置交換一下,它所占的尺寸就變成了9字節。可見,成員在結構 中的聲明順序也是非常重要的。
另外,在VB 中還可以把一個函數的指針傳遞到動態庫中,方法也并不復雜。但筆者強烈建議***不要這么做,因為這樣一來VB 應用程序就幾乎完全喪失了它所應有的安全性。如果 確實需要傳遞函數指針的話,那么還是編一個C/C++ 的程序來完成這項工作吧。以上介紹VB自定義類型參數的傳遞。
【編輯推薦】