VBA,VB 6.0計算資料型別佔用記憶體大小
阿新 • • 發佈:2021-02-11
需求背景
C、C++和.net語言都提供了計算變數記憶體大小的函式即SizeOf,該函式能正確返回資料型別佔用的記憶體位元組數,但是VBA、VB6.0沒有直接提供。特別在呼叫Windows API的時候,該功能顯示得特別重要。
實現思路
VBA、VB6.0雖然沒有提供指標運算子,但提供了幾個獲取變數指標(記憶體地址)的值的函式。
public function VarPtr(ptr as Any) as longPtr
'獲取變數自身的記憶體地址
public function StrPtr(ptr as Any) as longPtr
'獲取字串值的記憶體地址
public function ObjPtr(ptr as Any) as longPtr
'獲取物件的記憶體地址
VBA的記憶體分佈特點,通過分析VBA VB6.0中,一維陣列的記憶體是成線性分佈的。
Public Sub main()
Dim arr(1) As Integer
Dim brr(1) As Long
Debug.Print VarPtr(arr(0))
Debug.Print VarPtr(arr(1))
Debug.Print VarPtr(brr(0))
Debug.Print VarPtr(brr(1))
End Sub
如果需要計算某一個型別佔用記憶體位元組數,則定義一個一維陣列即可。
Public Sub main()
Dim arr(1) As Integer
Dim brr(1) As Long
Debug.Print VarPtr(arr(1)) - VarPtr(arr(0))
Debug.Print VarPtr(brr(1)) - VarPtr(brr(0))
End Sub
其它資料型別都可以通過這樣的方式來計算出記憶體的大小,這樣呼叫Windows API 就非常方便了。
結束語
通過這樣的方式完美實現SizeOf的功能,如有想深入研究VBA、VB6.0背後機制的童鞋,可以加群:794568082 互相交流。