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


Смешивание (structured C# и исключений C++)

Если требуется записывать более переносимый кода с помощью структурную обработку исключений в программе C++ не рекомендуется.Однако иногда необходимо компилировать с /EHa смешиванием и структурированных исключений и исходный код C++ и требуется некоторое средства для обработки обоих типов исключений.Поскольку структурного обработчика исключений, отсутствует понятие объектов или типизированных исключений, он не может обрабатывать исключения, вызываемые кодом C++; однако C++ catch обработчики могут обрабатывать структурированные исключения.Таким образом, синтаксис обработки исключений C++ (Try" throw" catch), но не принимает C-компилятором синтаксисом обработки структурированных исключений (__try" __except" __finally) поддерживает компилятором С++.

См. _set_se_translator дополнительные сведения об обработке структурированные исключения как исключения C++.

Если смешиваете структурированные исключения и C++, следует отметить следующее:

  1. Исключения C++ и структурированные исключения не могут быть смешанны в пределах той же функции.

  2. Обработчики завершения (__finally блоки) всегда выполняются даже во время очистки после исключение.

  3. Обработка исключений С++ может перехватывать и preserve семантики очистки во всех модулях компилированных с /EH параметр компилятора (этот параметр позволяет очистки семантику).

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

Дополнительные сведения

См. также

Ссылки

Обработка исключений С++