Проверка существования свойства COM-коллекции - PullRequest
1 голос
/ 28 мая 2011

Добрый день, все.

Я долго обдумывал это.Я программно (в VB6) просеиваю через Outlook PST, индексируя элементы, которые в них.Я столкнулся с тем, что немного испорчен, и именно здесь я испытываю трудности.Моя программа подключает PST и начинает детализацию по папкам (olFolder).Предполагается, что эти созданные Outlook объекты имеют коллекцию, в которой обычно хранятся подпапки (с соответствующим названием «Папки»).

Во время выполнения моего кода я рекурсивно вызываю функцию папки процессов для обработки всех папок в текущей папке, но у меня есть такая, у которой нет коллекции.Это вызывает исключение, потому что я проверяю количество папок в коллекции и нечего проверять.Я понимаю, как проверить наличие объекта, но мне сложно проверить наличие коллекции и объекта.Кто-нибудь сталкивался с этим раньше?

ОБНОВЛЕНИЕ

Выражение:

If Not fl.Folders Is Nothing Then

заканчивается тем, что тоже выдает исключение.Исключением, которое я получаю, является следующее:

Could not complete the operation because the service provider does not support it.

Это только при попытке доступа к этой поврежденной папке, которая, по-видимому, имеет свойство Folders Collection FUBARed.

FINAL Alrighty.В этом случае я просто собираюсь включить некоторую встроенную обработку ошибок.

If Not Err.Number = -2147221246 Then
'Do the thing with the other thing
End If
Err.Clear

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Если вы говорите о проверке obj.Coll.Count = 0, то посмотрите, если obj.Coll Is Nothing.

0 голосов
/ 03 июня 2011

хорошо, когда я работаю с веб-сервисами на vb6, я проверял некоторые случаи, если свойство существует.Я использовал этот метод.

Это медленно, но я надеюсь, что это поможет вам.

Public Function HasProperty(ByRef obj As Object, ByVal nameProperty As String) As Boolean

On Local Error GoTo hasProperty_Error

   Dim Result

   Result = CallByName(obj, nameProperty, VbGet)

  hasProperty = True
hasProperty_Done:
  Exit Function

hasProperty_Error:
    If Err.Number = 438 Then
      hasProperty = False
    End If

Resume hasProperty_Done

End Function
...