Как узнать инициализирован ли массив? - VB
Формулировка задачи:
Постоянно забываю, как это правильно делать.Здесь прочитал такой способ:
Но что-то мне совсем не нравится как определяется адрес SafeArray типа String.
Поэтому пользуюсь этим способом:
Решение задачи: «Как узнать инициализирован ли массив?»
textual
Листинг программы
Private Declare Function GetMem2 Lib "msvbvm60.dll" (src As Any, dst As Any) As Long Private Declare Function GetMem4 Lib "msvbvm60.dll" (src As Any, dst As Any) As Long Private Declare Function memcpy Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) As Long Public Function IsArrDimmed(vArray As Variant) As Boolean IsArrDimmed = (GetArrDims(vArray) > 0) End Function Public Function GetArrDims(vArray As Variant) As Integer Dim ppSA As Long Dim pSA As Long Dim vt As Long Dim sa As SAFEARRAY Const vbByRef As Integer = 16384 If IsArray(vArray) Then GetMem4 ByVal VarPtr(vArray) + 8, ppSA ' pV -> ppSA (pSA) If ppSA <> 0 Then GetMem2 vArray, vt If vt And vbByRef Then GetMem4 ByVal ppSA, pSA ' ppSA -> pSA Else pSA = ppSA End If If pSA <> 0 Then memcpy sa, ByVal pSA, LenB(sa) If sa.pvData <> 0 Then GetArrDims = sa.cDims End If End If End If End If End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д