C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 44 - Обработка ошибок COM - HRESULT / ActiveX по шагам / Приложение

Шаг 44 - Обработка ошибок COM - HRESULT

Многие из функций COM имеют этот тип возврата, который представляет из себя 32 битное число. Именно эта величина и является одним из методов возвращения ошибки. Биты этой величины содержат информацию:

31    - наличие ошибки ( 0 нет 1 есть)
30-27 - резерв
26-16 - область ошибки
15    - 0 код ошибки

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

#define FAILED(Status) ((HRESULT)(Status)<0)
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)

Пример применения макроса FAILED:

if ( FAILED( hr )) 
{ 
	cout << "Failed to create server instance " << endl;
	return;
}

Получив ошибку нам бы лучше всего ее расшифровать. Для этого есть специальная утилита в VC в меню TOOLS:

44_1.gif (2492 b)

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

44_2.gif (2339 b)

Увидев русские буквы я немного опешил. VC вроде нормальный. А чего это пишет не так ? Подумав я решил может и не правильно, но более менее разумно. Основу этой функции составляет функция Win 32 API - FormatMessage(), которая может вернуть информацию об ошибке. Windows у меня русский. Поискав на диске эту фразу я ее нашел. Она в Kernel32.dll.

44_3.gif (7448 b)


| |
Автор Каев Артем.
[AD]