COM: Как обработать конкретное исключение? - PullRequest
6 голосов
/ 01 июня 2010

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

Предмет не найден в коллекции в соответствии с запрошенным именем или порядковый

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

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

0x800A0CC1

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

records.Fields.Items( index )

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

Если Элемент не может найти объект в коллекция, соответствующая индексу аргумент, возникает ошибка.

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

Предмет не найден в коллекции в соответствии с запрошенным именем или порядковый

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

Ответы [ 3 ]

4 голосов
/ 01 июня 2010

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

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

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

3 голосов
/ 01 июня 2010

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

1 голос
/ 01 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...