}
else
delete buffer;
}
catch(MyException* exception)
{
char* msg = exception->GetError();
cout << msg << endl;
}
return 0;
}
Объект исключения может быть предельно прост, определяя лишь целочисленный код ошибки, либо достаточно сложен и представлять собой тщательно разработанный класс, Библиотека MFC предоставляет набор классов исключений, который включает базовый класс CException и несколько производных от него классов (CMemoryException, CArchiveException, CFileException, CUserException, CInternetException и др.). Абстрактный класс CException имеет конструктор и три метода: Delete(), удаляющий объект исключения, GetErrorMessage(), возвращающий строку, описывающую имевшее место исключение, и ReportError(), который выводит сообщение.
Например, CFileException имеет переменную-член m_cause, содержащую перечислимый тип, специфицирующий тип исключения. Примеры возможных возвращаемых значений: CFileException::fileNotFound и CFileException::readOnly.
Следующий пример показывает, как проверить содержимое CFileException. Другие типы исключений проверяются аналогично.
try
{
//
Код, выбрасывающий файловой исключение
.
}
catch( CFileException* theException )
{
if( theException->m_cause == CFileException::fileNotFound )
TRACE( "File not found\n" );
theException->Delete();
}
Рассмотрим пример использования CException::GetErrorMessage.
CFile fileInput;
CFileException ex;
if (!fileInput.Open("\\Too\\Many\\Bad\\Dirs.DAT", CFile::modeRead, &ex))
{
// при невозможности открытии файла
// можно получить точную диагностику
// и вывести сообщение об этом
TCHAR szCause[255];
CString strFormatted;
ex.GetErrorMessage(szCause, 255);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.