Классы CErrCodeMsg и CLastErrCodeMsg
От: Игорь Вартанов Ниоткуда  
Дата: 13.04.02 05:56
Оценка: 151 (2) -1
Статья:
Классы CErrCodeMsg и CLastErrCodeMsg
Автор(ы): Игорь Вартанов
Дата: 24.09.2001


Авторы:
Игорь Вартанов

Аннотация:
Класс CErrCodeMsg выполняет роль "обертки" вокруг системной функции FormatMessage(), т.е. предоставляет программисту простой и удобный интерфейс для получения текстовых строк описания кодов завершения и ошибок, возвращаемых системой. Инкапсуляция возможностей FormatMessage() выполнена неполностью, но реализована наиболее полезная на взгляд автора возможность сообщить системе о том, что ей необходимо самостоятельно выделить буфер для хранения возвращаемой строки. Кроме того, предоставлена возможность явно задать язык, для которого должна быть сформирована строка описания, хотя это сделано скорее из соображений возможного дальнейшего развития класса. Ну и, разумеется, класс самостоятельно реализует возврат памяти, выделенной под буфер.
---
С уважением,
Игорь
Did you know? :)
От: Frostbitten Россия  
Дата: 14.02.03 00:40
Оценка: 6 (1)
1. Если в конструкторе CErrCodeMsg::CErrCodeMsg() указать и для параметра "code" значение по умолчанию (напр., ERROR_SUCCESS), то можно пользоваться объектами класса CErrCodeMsg так:

CErrCodeMsg err; // Сначала определить, а потом использовать

err = ::CoInitialize(NULL);

2. А чтобы в окошках Watch и Variables дебугера видеть имя ошибки, а не "{...}" для объекта, можно добавить следующую строку в файл \Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\autoexp.dat в секцию [AutoExpand]:

CErrCodeMsg=<m_dwErrCode,hr>

Теперь в watch window объекты класса CErrCodeMsg будут выглядеть как "err | {E_INVALIDARG}", что куда интереснее трех точек.

3. А добавив в тотже файл секцию [ExecutionControl], а в нее строку

CErrCodeMsg::*=NoStepInto

вы не сможете входить в методы класса CErrCodeMsg при пошаговом выполнении, что сохранит время на выход из них :)
хм... хм...
От: elephantum  
Дата: 14.04.02 05:56
Оценка:
Вы меня извините конечно, но стоит ли подобный класс использовать? тем более, что все сводится к вызову одной функции...
...2b|!2b?
Re: хм... хм...
От: igor_soukhov_user  
Дата: 26.06.02 11:07
Оценка: +1
оч. удобная штука — говорю как практик.
Re: хм... хм...
От: Spark2K Россия  
Дата: 28.08.02 09:29
Оценка:
А сам ты ей пользуешься? И если да, то почему предпочитаешь ее классу стандартному _com_error.
Re: Классы CErrCodeMsg и CLastErrCodeMsg
От: Аноним  
Дата: 30.03.05 15:17
Оценка:
Здравствуйте, Игорь Вартанов, Вы писали:

ИВ>Статья:

ИВ>Классы CErrCodeMsg и CLastErrCodeMsg
Автор(ы): Игорь Вартанов
Дата: 24.09.2001


ИВ>Авторы:

ИВ> Игорь Вартанов

ИВ>Аннотация:

ИВ>Класс CErrCodeMsg выполняет роль "обертки" вокруг системной функции FormatMessage(), т.е. предоставляет программисту простой и удобный интерфейс для получения текстовых строк описания кодов завершения и ошибок, возвращаемых системой. Инкапсуляция возможностей FormatMessage() выполнена неполностью, но реализована наиболее полезная на взгляд автора возможность сообщить системе о том, что ей необходимо самостоятельно выделить буфер для хранения возвращаемой строки. Кроме того, предоставлена возможность явно задать язык, для которого должна быть сформирована строка описания, хотя это сделано скорее из соображений возможного дальнейшего развития класса. Ну и, разумеется, класс самостоятельно реализует возврат памяти, выделенной под буфер.

Просто мегакласс. Как же я раньше жил без такого чуда. Надо ещё серию статей по использованию сиго шедевра написать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.