Обработка исключений в C / CLI

#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 .