Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
379
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

else MessageBox(NULL,"File Exception", "Exception", MB_OK | MB_ICONSTOP);

ptrException -> Delete();

}

//Обработчик для исключений класса CException и

//классов наследованных от него catch(CException* ptrException)

{

MessageBox(NULL,"Exception", "Exception", MB_OK | MB_ICONSTOP);

ptrException -> Delete();

}

//Все остальные исключения обрабатываются здесь catch(...)

{

MessageBox(NULL,"Another Exception", "Exception", MB_OK | MB_ICONSTOP);

}

return 0;

}

В блоке try мы пытаемся открыть для чтения файл с именем This file is absent. Длинные имена файлов, содержащие символы пробелов, разрешены в операционных системах Windows 95 и Windows NT. Если файла This file is absent нет на диске, тогда создается объект класса CFileException и вызывается исключение.

Обработчик исключений, связанных с ошибками при работе с файловой системой, проверяет, вызвано ли оно тем, что приложение пытается открыть несуществующий файл. Если это так, на экране отображается сообщение File Not Found.

После обработки исключения, управление передается первому оператору за последним блоком catch. В нашем примере это оператор return. Он завершает работу приложения.

Вы можете сами создать объект класса CFileException и вызвать исключение. Для этого рекомендуется использовать функцию AfxThrowFileException:

void AfxThrowFileException(int cause, LONG lOsError = –1);

Параметр cause должен определять причину исключения. В качестве этого параметра можно задавать возможные значения для элемента данных m_cause из класса CFileException (см. таблицу выше). Необязательный параметр lOsError может содержать код ошибки, определенной операционной системой.

Класс CArchiveException

Исключительные ситуации, возникающие во время записи и восстановления объектов из файла, вызывают исключение

CArchiveException.

Причина, по которой было вызвано исключение, определяется элементом данных m_cause из класса CFileException. В него заносится код, по которому можно определить причину исключения.

Константа

Причина ошибки

CArchiveException::

Без ошибки

none

 

CArchiveException::

Неопределенная ошибка

generic

 

CArchiveException::

Попытка записи в архивный объект, открытый для

readOnly

чтения

CArchiveException::

Обнаружен конец файла при чтении объекта

endOfFile

 

CArchiveException::

Попытка читать из архивного объекта, открытого для

writeOnly

записи

CArchiveException::

Неправильный формат файла

badIndex

 

CArchiveException::

Попытка прочитать объект в объект неправильного

badClass

типа

CArchiveException::

Попытка чтения объекта с несоответствующей

badSchema

версией класса

Чтобы создать объект CArchiveException и вызвать исключение воспользуйтесь функцией AfxThrowArchiveException: void AfxThrowArchiveException(int cause);

Параметр cause должен определять причину вызова исключения. Возможный список значений этого параметра представлен в таблице выше (см. элемент данных m_cause класса CArchiveException).

Класс CNotSupportedException

Если приложение пытается вызвать несуществующий метод класса, то вызывается исключение

CNotSupportedException. Конструктор класса CNotSupportedException имеет следующий вид:

CNotSupportedException();

Однако если вы сами желаете вызвать из своего кода исключение этого типа, то вместо того, чтобы создавать объект класса CNotSupportedException вручную и передавать его оператору throw, воспользуйтесь функцией

AfxThrowNotSupportedException: void AfxThrowNotSupportedException();

Класс CResourceException

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

void AfxThrowResourceException();

Класс CUserException

Если какая-либо операция при работе приложения закончилась с ошибкой, оно может вызвать функцию AfxMessageBox, чтобы сообщить об этом пользователю, а затем вызвать исключение с объектом класса CUserException. Чтобы создать объект класса CUserException и вызвать исключение, воспользуйтесь функцией AfxThrowUserException: void AfxThrowUserException();