Неуправляемый код Visual C ++: использовать исключения / EHa или / EHsc для C ++?

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

command.Text = "insert into myTable(myDate) values(?dateParam)";
command.Parameters.Add("?dateParam", theDate);
16
задан MarkS 14 April 2013 в 00:09
поделиться

1 ответ

EHa делает две вещи. Прежде всего, он подавляет оптимизацию, которая исключает фильтры исключений, которые автоматически вызывают деструкторы локальных переменных класса, если анализатор кода не может увидеть какой-либо код, который может вызвать исключение C ++. Это делает разматывание стека безопасным для любого вида исключения, а не только для исключения C ++. Затраты на эти фильтры исключений составляют время на x86 и пространство на x86 и x64.

И да, он изменяет поведение catch (...), теперь он также фильтрует все исключения SEH, а не только C ++. Это действительно азартная игра, потому что вы ловите все очень неприятные вещи, асинхронные аппаратные исключения. Хотя я лично не думаю, что перехват всех исключений C ++ также очень оправдан, у вас все еще есть смутное представление о том, в какой степени изменилось состояние программы и почему это не удалось.

Реально, вам нужно переключиться на использование __try/__except, чтобы вы могли написать свой собственный фильтр исключений и избежать обнаружения плохих. Код исключения для исключений C ++ - 0xe04d5343 («MSC»). Использование _set_se_translator () было бы другим подходом.

20
ответ дан Hans Passant 14 April 2013 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: