Вот что я сделал. Это похоже на ответ GSerg , но использует лучше документированную функцию API CopyMemory и полностью автономно (вы можете просто передать массив вместо ArrPtr (массив) этой функции). Он использует функцию VarPtr, которую Microsoft предупреждает против , но это приложение только для XP, и оно работает, поэтому меня это не касается.
Да, я знаю, что эта функция будет принимать все, что вы к ней добавляете, но я оставлю проверку ошибок в качестве упражнения для читателя.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Public Function ArrayIsInitialized(arr) As Boolean
Dim memVal As Long
CopyMemory memVal, ByVal VarPtr(arr) + 8, ByVal 4 'get pointer to array
CopyMemory memVal, ByVal memVal, ByVal 4 'see if it points to an address...
ArrayIsInitialized = (memVal <> 0) '...if it does, array is intialized
End Function