Четвертый Borland C++ и его окружение

       

Оверлеи и обработка исключительных ситуаций


Если вы пишете оверлейную программу, содержащую конструкции

для обработки исключительных ситуаций, то существует ряд ситуаций, которых следует избегать. Следующие программные элементы не

могут содержать конструкцию обработки исключительных ситуаций:

  • Не расширяемые подставляемые функции.
  • Шаблоны функций.
  • Функции-элементы или шаблоны классов.
  • Конструкция обработки исключительной ситуации включает в себя написанный пользователем блок try/catch и __try/__except. Кроме того, компилятор также может включать обработчики исключительных ситуаций и блоки с локальными динамическими переменными, спецификациями исключительных ситуаций и некоторые выражения new/delete.

    Если вы пытаетесь использовать в оверлее вышеуказанные конструкции обработки исключительных ситуаций, компоновщик идентифицирует функцию и модуль следующим сообщением:

    Error: Illegal local public in функция in module модуль

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

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

    оверлейный модуль, который определяет или использует конструкторы

    или деструкторы классов с множественным наследованием может привести к тому, что компоновщик будет генерировать следующее сообщение об ошибке:

    Error: Illegal local public in класс: in module модуль

    Когда генерируется такое сообщение, идентифицированный компоновщиком модуль не следует делать оверлейным.

    В классе контейнера (в BIDS?.LIB) есть механизм обработки

    исключительной ситуации, который по умолчанию выключен. Однако

    диагностическая версия генерирует исключительные ситуации и не

    может использоваться в оверлеях. По умолчанию класс string может

    генерировать исключительные ситуации, и его не следует использовать в программах с оверлеями.



    Содержание раздела