Шаг 259.
Среда программирования Visual C++.
Ошибки СОМ-компонентов. Доступ клиентских приложений к кодам HRESULT

    На этом шаге мы рассмотрим особенности доступа клиентских приложений к кодам HRESULT.

    Многие клиентские приложения не способны даже получить коды HRESULT, возвращаемые методом сервера. Таким образом, созданные коды часто становятся ненужными. А виноваты в этом ограничения, присущие интерфейсу IDispatch.

    Причина этого - класс-оболочка, который Visual C++ создает для того, чтобы взаимодействоваь с компонентом посредством интерфейса IDispatch, а не вызывать его методы напрямую через таблицу vtable. Соединяясь с сервером такими окольными путями, объект IDispatch теряет возвращаемые методами значения, и они никогда не достигают клиентского приложения, которое узнает об ошибке только по исключению, возбужденному в результате получения отрицательного кода HRESULT от вызывавшего метода. Звключив код, обращающийся к серверу, в блоки try/catch, приложение получает возможность реагировать на ошибки, однако точную их причину определить не сумеет.

    Не лучше остоят дела и в Microsoft Visual Basic. Точно так же, приложения, написанные с его использованием, не способны получить значение HRESULT, а могут только реагировать на отрицательные коды ошибок - посредством оператора On Error.

    В заключение следует отметить, что некоторые клиентские приложения, написанные на C++, все же получают коды HRESULT. Независимо от того, применяет программа MFC или нет, она не обязана полагаться на интерфейс IDispatch, поэтому она может получать возвращаемые сервером коды, обходя создаваемый Visual C++ класс-оболочку.

    На следующем шаге мы рассмотрим событие Error.




Предыдущий шаг Содержание Следующий шаг