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


Основные моменты реализации - часть 2


Листинг 8-2. Функция  CcrashFinderDoc: :LoadAndShowimage

BOOL CcrashFinderDoc :: LoadAndShowimage ( CBinaryImage * plmage,

BOOL bModifiesDoc)

// Проверить предположения за пределами функции.

ASSERT ( this);

ASSERT ( NULL != m_pcTreeControl);

// Строка, которая может использоваться для любых сообщений

CString sMsg ;

// Состояние для графики дерева

int iState = STATEJSIOTVALID;

// Переменная для булевского возвращаемого значения

BOOL   bRet ;

// Убедиться, что параметр — в порядке. 

ASSERT ( NULL != plmage);

 if ( NULL == plmage) 

{

// Ничего не может случиться с плохим указателем,

 return ( FALSE);

 }

// Проверить, правилен ли этот образ. Если это так, убедиться,

 // что его еще нет в списке и что он не имеет

 // конфликтующего адреса загрузки. Если это не так, все равно

 // добавить его, т. к. нехорошо просто выбрасывать данные

 // пользователя.

// Если образ плох, я просто показываю его с неправильным растром 

// и не загружаю в символьную машину,

 if ( TRUE == p!mage->IsValidImage ()) 

{

// Здесь сканируются элементы массива данных, чтобы отыскать

 // три проблемных условия:

// 1. Двоичный образ уже есть в списке. Если это так, то возможен

 // только преждевременный выход.

// 2. Двоичный образ будет загружен в адрес, который уже 

// есть в списке. Если это так, открываем диалоговое окно

 // Properties для двоичного образа, чтобы перед его 

// добавлением в список можно было изменить адрес загрузки. 

// 3. Проект уже включает исполняемый (ЕХЕ-)образ, и plmage тоже 

// является исполняемым.

// Для начала я всегда оптимистично предполагаю, что данные в

 // plmage правильны. 

BOOL bValid = TRUE;

int iCount = m_cDataArray.GetSize ();

 for ( int i = 0; i < iCount; i++) 

{

CBinaryImage * pTemp = (CBinaryImage *)m_cDataArray[ i ]; 

ASSERT ( NULL != pTemp); 

if ( NULL = pTemp) 




Начало  Назад  Вперед



Книжный магазин