#exception #visual-c #c -cli #managed-c
#исключение #visual-c #c -cli #управляемый-c
Вопрос:
В неуправляемом C в настоящее время принято всегда перехватывать исключения с помощью ссылки const.
У меня не такой опыт работы с управляемым C (хотя я начинаю разбираться в различиях), но мне интересно, каков наилучший способ перехватывать исключения здесь? Будут ли исключения когда-либо перехватываться дескриптором, т. Е.
try
{
}
catch( ExceptionType^ ex )
{
}
.. и если да, будут ли какие-либо оговорки?
Комментарии:
1. Цитата:
Biggest mistake is assuming that it is similar to C
.
Ответ №1:
Для обработки исключений управляемого кода, да, это способ сделать это.
Однако, если вы используете управляемый C , я полагаю, это связано с тем, что у вас есть необходимость взаимодействовать с машинным кодом (или же вы просто мазохист? извините, я не фанат управляемого C ), в этом случае все сложнее. Смотрите здесь некоторую информацию о проблемах обработки исключений в смешанном режиме.
Комментарии:
1. В отличие от вас, я действительно ценю C / CLI (это его официальное название), но я бы также не стал использовать его вне сценария взаимодействия. Вы действительно редко перехватываете. СЕТЕВЫЕ исключения в мире C / CLI. Тем не менее, вы должны перехватывать каждое исключение C и повторно помещать их в форму .NET. Поскольку вы создаете дескриптор в этой ситуации, логично, что вы перехватываете дескриптор, когда вы должны перехватить . СЕТЕВЫЕ исключения.
2. Мое главное возражение — это утверждение, что взаимодействовать с реальным (т. Е. родным) C так просто. Я уверен, что для взаимодействия это иногда просто необходимо. Нет взаимодействия? Просто используйте C #.
3. Не могу не согласиться. Но я не могу не сказать, что гораздо приятнее использовать C / CLI и .NET, чем ATL и COM. Печальный факт заключается в том, что в Windows нет ничего простого.
Ответ №2:
Когда вы создаете управляемое исключение, его невозможно перехватить, кроме как с помощью дескриптора, собранного с помощью мусора. Управляемый код имеет гораздо более строгие правила о том, что может и не может быть выброшено, в отличие от C .