嘿,我从 VBForums "VB6 - Returning/Detecting Empty Arrays" 中找到了解决这个问题的方法。二)
(L/UBound 不适用于空数组 - 它返回超出范围的下标。;))
所以...
Private Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Public Function Peek(ByVal lPtr As Long) As Long
Call CopyMemory(Peek, ByVal lPtr, 4)
End Function
请记住在定义此子例程之前声明您自己的变量!否则会导致一些奇怪的错误(VB突然用Exit Function替换了我的Exit Sub语句!)。
然后我用
If Peek(ArrPtr(SomeArray)) = 0 Then
MsgBox "Looks like empty array SomeArray() before ReDim ^_^"
End If
和
Erase SomeArray
If Peek(ArrPtr(SomeArray)) = 0 Then
MsgBox "Looks like empty array SomeArray() after Erase ^_^"
End If
一切正常!
不是很简单,但很好。
谢谢大家,我将学习这个名为 Collection 的链表。
特别感谢 VBForums,他们真的是极客。