Отладка приложений



              

Требования к TraceSrv - часть 5


В интерфейсе ITrace определены свойства1TraceSrv, которые реализуют перечисленные выше (в п. 6 списка требований) параметры операторов трассировки (на тот случай, если приложение, использующее TraceSrv, захочет изменить их). Когда свойство программы TraceSrv изменяется, она генерирует событие, которое должна обработать специальная программа просмотра трассы — TraceView. Эта программа (она рассмотрена чуть ниже) показывает, как следует обрабатывать каждое событие, которое генерирует TraceSrv.

Мастер AppWizard (создающий СОМ-приложения средствами ATL) строит почти 90% кода СОМ+-службы. Мне пришлось написать только интерфейс TraceSrv и обработчики. Большая часть этих кодов находится в файлах TraceSrvTRACE.H и TRACE.CPP на сопровождающем компакт-диске. Они, в основном, выполняют установку и получение свойств и запуск событий. Единственная неординарная функция CTrасе: :ProcessTrace (обрабатывающая строки трассы) показана в листинге 11-2.

Здесь речь идет о том, что атрибуты propput и propget IDL-файла информируют некоторые языки (типа Visual Basic), что с указанным в них методом нужно обращаться, как со свойством. — Пер.

Листинг 11-2. Функция  CTrасе: :ProcessTrace

HRESULT CTrace :: ProcessTrace ( BSTR bstrText , long dwPID) 

{

// Все перепроверяйте и ничему не верьте!

ASSERT ( this ) ;

ASSERT ( NULL != bstrText ) ; 

// Длина входной строки. Длина вычисляется после того, как

// проверен указатель.

int ilnputLen = 0 ; 

if ( NULL == bstrText ) 

{

return ( Error ( IDS_NULLSTRINGPASSED , 

 GUID_NULL ,

 E_INVALIDARG ) ) ;

 }

// bstrText содержит некоторый указатель.

// Удостовериться, что указатель содержит правильное значение. 

ASSERT ( FALSE = IsBadReadPtr ( bstrText , sizeof ( BSTR ) ) ) ; 

ASSERT ( L';\0'; != *bstrText ); 

if ( ( TRUE == IsBadReadPtr ( bstrText , sizeof ( BSTR ) ) ) ||

( L';\0'; == *bstrText ) ) 

{

return ( Error ( IDS_INVALIDSTRING , GUID_NULL

E_INVALIDARG ) ) ; 




Содержание  Назад  Вперед