Оверлеи и обработка исключительных ситуаций
Если вы пишете оверлейную программу, содержащую конструкции
для обработки исключительных ситуаций, то существует ряд ситуаций, которых следует избегать. Следующие программные элементы не
могут содержать конструкцию обработки исключительных ситуаций:
Конструкция обработки исключительной ситуации включает в себя написанный пользователем блок try/catch и __try/__except. Кроме того, компилятор также может включать обработчики исключительных ситуаций и блоки с локальными динамическими переменными, спецификациями исключительных ситуаций и некоторые выражения new/delete.
Если вы пытаетесь использовать в оверлее вышеуказанные конструкции обработки исключительных ситуаций, компоновщик идентифицирует функцию и модуль следующим сообщением:
Error: Illegal local public in функция in module модуль
Когда эта ошибка вызывается подставляемой функцией, вы можете переписать функцию таким образом, чтобы она не была подставляемой. Если это вызвано шаблоном функции, можно сделать следующее:
Особенно внимательно нужно строить оверлейную программу, которая использует множественное наследование. Попытка создать
оверлейный модуль, который определяет или использует конструкторы
или деструкторы классов с множественным наследованием может привести к тому, что компоновщик будет генерировать следующее сообщение об ошибке:
Error: Illegal local public in класс: in module модуль
Когда генерируется такое сообщение, идентифицированный компоновщиком модуль не следует делать оверлейным.
В классе контейнера (в BIDS?.LIB) есть механизм обработки
исключительной ситуации, который по умолчанию выключен. Однако
диагностическая версия генерирует исключительные ситуации и не
может использоваться в оверлеях. По умолчанию класс string может
генерировать исключительные ситуации, и его не следует использовать в программах с оверлеями.