数组 – 如何确定数组是否在VB6中初始化?

前端之家收集整理的这篇文章主要介绍了数组 – 如何确定数组是否在VB6中初始化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
传递一个undimensioned数组到VB6的Ubound函数将导致一个错误,所以我想检查它是否已经被确定尺寸,然后尝试检查其上限。我如何做到这一点?
我使用这个:
Public Declare Function GetMem4 Lib "msvbvm60" (ByVal pSrc As Long,ByVal pDst As Long) As Long
Public Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (arr() As Any) As Long

Public Function StrArrPtr(arr() As String,Optional ByVal IgnoreMe As Long = 0) As Long
  GetMem4 VarPtr(IgnoreMe) - 4,VarPtr(StrArrPtr)
End Function

Public Function UDTArrPtr(ByRef arr As Variant) As Long
  If VarType(arr) Or vbArray Then
    GetMem4 VarPtr(arr) + 8,VarPtr(UDTArrPtr)
  Else
    Err.Raise 5,"Variant must contain array of user defined type"
  End If
End Function


Public Function ArrayExists(ByVal ppArray As Long) As Long
  GetMem4 ppArray,VarPtr(ArrayExists)
End Function

用法

? ArrayExists(ArrPtr(someArray))
? ArrayExists(StrArrPtr(someArrayOfStrings))
? ArrayExists(UDTArrPtr(someArrayOfUDTs))

你的代码似乎做同样的(测试SAFEARRAY **为NULL),但在一种方式,我会考虑一个编译器错误:)

猜你在找的VB相关文章