Поделиться через


Обработка исключений в MFC

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

В этой статье описываются механизмы обработки исключений, доступные в MFC. Доступны два механизма:

  • Исключения C++, доступные в MFC версии 3.0 и более поздних версиях

  • Макросы исключений MFC, доступные в MFC версии 1.0 и более поздних версиях

Если вы пишете новое приложение с помощью MFC, следует использовать механизм C++. Механизм на основе макросов можно использовать, если существующее приложение уже использует этот механизм.

Вы можете легко преобразовать существующий код для использования исключений C++ вместо макросов исключений MFC. Преимущества преобразования кода и рекомендаций для этого описаны в статье исключения: преобразование из макросов исключений MFC.

Если вы уже разработали приложение с помощью макросов исключений MFC, вы можете продолжать использовать эти макросы в существующем коде, используя исключения C++ в новом коде. Статья Исключения: изменения макросов исключений в версии 3.0 содержит рекомендации по этому вопросу.

Замечание

Чтобы включить обработку исключений C++ в коде, выберите включить исключения C++ на странице создания кода в папке C/C++ диалогового окна "Страницы свойств проекта" или используйте параметр компилятора /EHsc .

В этой статье рассматриваются следующие разделы:

Использование исключений

Три категории результатов могут возникать при вызове функции во время выполнения программы: обычное выполнение, ошибочное выполнение или ненормальное выполнение. Каждая категория описана ниже.

  • Обычное выполнение

    Функция может выполняться нормально и возвращать результат. Некоторые функции возвращают код результата вызывающему объекту, который указывает на результат функции. Возможные коды результатов строго определены для функции и представляют диапазон возможных результатов функции. Код результата может указывать на успех или сбой или даже может указывать конкретный тип сбоя, который находится в обычном диапазоне ожиданий. Например, функция состояния файла может возвращать код, указывающий, что файл не существует. Обратите внимание, что термин "код ошибки" не используется, так как результирующий код представляет собой один из многих ожидаемых результатов.

  • Ошибочное выполнение

    Вызывающий объект делает некоторую ошибку при передаче аргументов в функцию или вызывает функцию в неуместном контексте. Эта ситуация вызывает ошибку, и она должна быть обнаружена утверждением во время разработки программы. Дополнительные сведения о утверждениях см. в разделе "Утверждения C/C++".

  • Ненормальное исполнение

    Ненормальное выполнение включает ситуации, когда условия, не связанные с контролем программы, например с низкой памятью или ошибками ввода-вывода, влияют на результат функции. Ненормальные ситуации должны обрабатываться путем перехвата и генерации исключений.

Использование исключений особенно подходит для ненормального выполнения.

Поддержка исключений MFC

Независимо от того, используете ли вы исключения C++ непосредственно или используете макросы исключений MFC, вы будете использовать класс CException или CExceptionпроизводные объекты, которые могут быть вызваны платформой или приложением.

В следующей таблице показаны предопределенные исключения, предоставляемые MFC.

Класс исключений Значение
Класс CMemoryException Недостаточно памяти
Класс CFileException Файловое исключение
Класс CArchiveException Исключение архивации и сериализации
Класс CNotSupportedException Ответ на запрос относительно неподдерживаемой услуги
Класс CResourceException Исключение выделения ресурсов Windows
Класс CDaoException Исключения базы данных (классы DAO)
Класс CDBException Исключения базы данных (классы ODBC)
Класс COleException Исключения OLE
Класс COleDispatchException Исключения диспетчеризации (автоматизации)
Класс CUserException Исключение, которое оповещает пользователя с помощью окна сообщения, а затем выбрасывает универсальный класс CException

С версии 3.0 MFC использовал исключения C++, но по-прежнему поддерживает более старые макросы обработки исключений, которые похожи на исключения C++ в форме. Хотя эти макросы не рекомендуется для нового программирования, они по-прежнему поддерживаются для обратной совместимости. В программах, которые уже используют макросы, можно также свободно использовать исключения C++. Во время предварительной обработки макросы оценивают ключевые слова обработки исключений, определенные в реализации MSVC языка C++ на языке Visual C++ версии 2.0. При начале использования исключений C++ можно оставить существующие макросы исключений. Сведения о сочетании макросов и обработке исключений C++ и преобразовании старого кода для использования нового механизма см. в статьях " Исключения: Использование макросов MFC и исключений C++ иисключений: преобразование из макросов исключений MFC. Предыдущие макросы исключений MFC, если они по-прежнему используются, преобразуются в ключевые слова исключений C++. См. исключения: изменения макросов исключений в версии 3.0. MFC не поддерживает напрямую структурированные обработчики исключений Windows NT ( SEH), как описано в разделе "Обработка структурированных исключений".

Дополнительные сведения об исключениях

В следующих статьях объясняется использование библиотеки MFC для передачи исключений:

В следующих статьях сравниваются макросы исключений MFC с ключевыми словами исключений C++ и объясняется, как адаптировать код:

См. также

Современные рекомендации по C++ по исключению и обработке ошибок