Показать сообщение отдельно
Старый 01.02.2008, 17:11   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Ax3 KR2 COM: Получение человеческих сообщений об ошибках
Я работаю с ADSI при помощи COM.

В некоторых случаях возникает ошибка:

Метод 'SetInfo' в COM-объекте класса '<неизвестно>' возвратил код ошибки 0x8007200A (<неизвестно>), который означает: <неизвестно>.

Если обработать ошибку вот таким образом:

X++:
void setInfo()
{
    COMError errorCom;
;
        try
        {
             object.SetInfo();
        }
        catch (Exception::Error)
        {
            errorCom = object.error();
            if (errorCom)
                throw error(strFmt("Ошибка %1 ('%2')",
                    errorCom.number(), WinApi::formatMessage(errorCom.number())));
            else
                throw Exception::Error;

        }
}

Ошибка становится человеческой:

Ошибка -2147016694 ('Указанное значение или атрибут службы каталогов не существует.')


Но при этом мы обязаны знать, какой объект зашибся.

Я пробовал обработать эту штуку глобально, но вместо errorCom.number() использовать WinApi::GetLastError, но оказалось, что она возвращает 0 всегда в таки случаях.

Как сделать так, чтобы
  • ошибки выглядели по человечески
  • не надо было бы писать обработку для всех объектов
За это сообщение автора поблагодарили: axaLearner (1).