2014-11-14 2 views
0

Возможно ли использовать VC (предпочтительно одна из последних версий) и использовать исключения C++, которые не реализованы через SEH?Исключения C++ в VC без SEH

ПРИМЕЧАНИЕ. Я не имею в виду перехватывание исключений SEH с использованием предложения catch C++ (/ Eha \/Ehsc), я имею в виду использование исключений C++ без исключения SEH в фоновом режиме.

+2

Мне любопытно узнать, какова ваша основная цель, и что вы подразумеваете под «полетом». Обработка структурированных исключений может быть сложной, но она не хаотична. –

+0

Изменение ответа, сек. Это будет заменой той части среды выполнения (_CxxThrowException и др.). – defube

ответ

0

По умолчанию исключения C++ построены поверх SEH.

Это можно изменить, но вам придется переписать большую часть времени выполнения и реализовать логику обработки кадров самостоятельно (читайте как: много сборок).

Из-за резких различий между раскладками кадров стека в 32-битных и 64-битных сборках (для x86) вы не сможете повторно использовать очень много кода между ними (64-разрядная EH также требует копания в другая область изображения PE).

Это, если действительно действительно необходимо, просто убедитесь, что ваш код как можно более переносимый, используя исключения, как и в любом другом месте. Вы можете, по большей части, притворяться, что SEH даже не существует.

+0

Согласовано. SEH - это просто частная информация о том, как VC реализует 'try' /' catch' для исключений C++. Просто игнорируйте SEH, если вам действительно не нужно обрабатывать исключение SEH напрямую, и в этом случае вы должны использовать '__try' /' __except' вместо 'try' /' catch'. –

Смежные вопросы