COM: Как обработать определенное исключение?

я говорю с COM-объектом (объект Microsoft ADO Recordset). В определенном случае recordset возвратит неудавшееся (т.е. отрицательный) HRESULT, с сообщением:

Объект не может быть найден в наборе, соответствующем требуемому имени или порядковый

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

Теперь я хотел бы обработать это исключение особенно. COM-объект бросил HRESULT

0x800A0CC1

В идеальном мире Microsoft зарегистрировала бы, какие ошибки могут быть возвращены, когда я пытаюсь получить доступ:

records.Fields.Items( index )

с недопустимым индексом. Но они не делают; они, которые большинство, которое они говорят, - то, что ошибка может произойти, т.е.:

Если Объект не может найти объект в наборе, соответствующем Индексному аргументу, ошибка происходит.

Учитывая, что возвращенный код ошибки не документируется, это корректный для обработки определенного кода возврата '0x800A0CC1', когда я пытаюсь захватить исключение:

Объект не может быть найден в наборе, соответствующем требуемому имени или порядковый

?

Так как Microsoft не зарегистрировала код ошибки, они технически изменяют его в будущем.

6
задан Ian Boyd 1 June 2010 в 17:42
поделиться

3 ответа

Они задокументировали этот код ошибки, но его трудно найти: ErrorValueEnum :

adErrItemNotFound    3265 -2146825023 0x800A0CC1    Item cannot be found in the collection that corresponds to the requested name or ordinal.

.. так как это задокументированный код ошибки, его можно безопасно проверить явно.

4
ответ дан 16 December 2019 в 21:35
поделиться

Вам придется решить, стоит ли рисковать, но я считаю, что вряд ли Microsoft изменит этот код ошибки. Проверка на наличие этого конкретного кода ошибки - довольно надежный способ.

3
ответ дан 16 December 2019 в 21:35
поделиться

Да, нормально. На самом деле это задокументированный код ошибки, хотя найти их никогда не бывает легко. Он определен в файле SDK Windows msdao15.idl, adErrItemNotFound (ошибка 3265)

1
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: