ええと、VBForums「VB6 - Returning/Detecting Empty Arrays」からこの問題を解決する方法を見つけました。B)
(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 Sub ステートメントを Exit Function に置き換えました!)。
それから私は使用しました
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
そしてすべてがうまくいきます!
それほど単純ではありませんが、問題ありません。
皆さん、Thx コレクションという名前のこの連鎖リストを学習します。
特に VBForums に感謝します。彼らは本当にオタクです。