Как обращаться с System.AccessViolationException? - PullRequest
4 голосов
/ 29 февраля 2012

Я использую внешнюю библиотеку C в своей программе, написанной на C ++ / CLI с .NET framework 4. Иногда происходит сбой lib, и я получаю сообщение:

Unhandled Exception: System.AccessViolationException: попытка чтения или записи защищенной памяти.

Поэтому я попытался обработать ее с помощью блока try / catch:

try
{
  Init(); //< lib call which sometimes crashes
}
catch (Exception^ e)
{
  // handle the error
}

Но исключение остается невыполненным: моя программа падаетперед входом в блок catch.

Как я могу обработать это исключение, чтобы предотвратить сбой моей программы?

1 Ответ

3 голосов
/ 21 февраля 2013

Для ясности я копирую / вставляю ответ , данный в комментариях Flot2011 здесь:

Есть несколько способов обойти это:

  • Перекомпилируйте как сборку .NET 3.5 и запустите ее в .NET 4.0.
  • Добавьте строку в файл конфигурации вашего приложения в элементе configuration / runtime: <legacyCorruptedStateExceptionsPolicy enabled="true|false"/>
  • Украсьте методы, в которые вы хотите перехватить эти исключения, атрибутом HandleProcessCorruptedStateExceptions.Подробнее см. в этой статье .
...