Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: 4elovekssn.blog.ru
 Профиль | | #3
Добавлено: 29.11.05 15:37
Проверь UBound'ом, если возникает ошибка - значит, пустой.

Встречал типа того:
function UboundS(array() as string) as long
    on error Resume next
    UboundS = -1
    UboundS = Ubound(array())
end function


если результат = -1, значит, пустой.

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 29.11.05 15:44
БЕЗ ГЕНЕРАЦИИ ИСКЛЮЧЕНИЯ

Отдельную функцию на VB писать нежелательно.

В противном случае вопроса бы не возникло :))

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 29.11.05 16:05
Круто, только где мне взять array descriptor :)

То, что VB-шный массив является массивом SAFEARRAY - новость? Передавая по ссылке, ты передаешь указатель на массив типа SAFEARRAY, или другими словами, array decriptor

Private Declare Function SafeArrayGetUBound Lib "oleaut32.dll" (ByRef a() As String, _
                                                                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
Не новость, конечно, просто че-то ступил. Просто так я уже пробовал. Но, видно, че-то не то засунул - всегда выдавал одно и то же :(

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам