Страница: 1 |
Страница: 1 |
Вопрос: Размерность массива
Добавлено: 29.11.05 14:59
Автор вопроса: LamerOnLine | ICQ: 334781088
Вопросик следующего плана:
Есть udt, которые содержать динамические массивы. Все ошибки в работе со структурами логируются. Нужно: определить размерность массива БЕЗ ГЕНЕРАЦИИ ИСКЛЮЧЕНИЯ в случае незаданной длины массива (не выполнен ReDim). То есть, просто узнать что он пустой. Отдельную функцию на VB писать нежелательно.
Вроде была апишка похожая, только че-то не вспомню никак...
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 29.11.05 15:15
SafeArrayGetUBound не пробовал?
Если я правильно понял, она возвращает DISP_E_BADINDEX на неопределенный массив
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 29.11.05 15:33
Круто, только где мне взять array descriptor
Номер ответа: 3
Автор ответа:
Calhoon
ICQ: 789764
Вопросов: 90
Ответов: 230
Web-сайт:
Профиль | | #3
Добавлено: 29.11.05 15:37
Проверь UBound'ом, если возникает ошибка - значит, пустой.
Встречал типа того:
on error Resume next
UboundS = -1
UboundS = Ubound(array())
end function
если результат = -1, значит, пустой.
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 29.11.05 15:44
В противном случае вопроса бы не возникло )
Номер ответа: 5
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #5
Добавлено: 29.11.05 16:05
Круто, только где мне взять array descriptor
То, что VB-шный массив является массивом SAFEARRAY - новость? Передавая по ссылке, ты передаешь указатель на массив типа SAFEARRAY, или другими словами, array decriptor
ByVal nDim As Long, _
ByRef plUbound As Long) _
As Long
Private Const DISP_E_BADINDEX As Long = &H8002000B
Private Sub Form_Load()
Dim arr() As String
Dim uB As Long, ret As Long
If SafeArrayGetUBound(arr(), 1, uB) = DISP_E_BADINDEX Then
MsgBox "Array Is Empty"
End If
ReDim arr(0 To 10)
If SafeArrayGetUBound(arr(), 1, uB) <> DISP_E_BADINDEX Then
MsgBox UBound(arr())
End If
End Sub
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 29.11.05 16:24
Не новость, конечно, просто че-то ступил. Просто так я уже пробовал. Но, видно, че-то не то засунул - всегда выдавал одно и то же