2010-06-28 9 views
1

My C#, вызванный методом из dll C++ после того, как возвращенный вызов, мое приложение просто исчезло без какого-либо сообщения. хочу добавить try catch, чтобы получить причину. как мне это сделать. Просто попытку в вызове метода?Как перехватить исключение в C#, которое вызывает C++ dll

EDIT: [HandledProcessCorruptedStateExceptions] не принадлежит к C#?

+0

Вы можете показать соответствующие фрагменты кода? –

+0

Пожалуйста, уделите немного времени, чтобы решить последние несколько тем, которые вы начали. –

ответ

1

Интересная статья об обработке исключений, а также в отношении обработки искаженных государственных исключений:

CLR Inside Out: Handling Corrupted State Exceptions

Однако, я предположил бы, что есть что-то не так либо так, как вы вызывают собственный метод или собственный метод. Лучше всего исправить исходную проблему, вызывающую CSE, вместо того, чтобы ловить исключения, которые указывают, что ваше приложение больше не находится в стабильном состоянии. Вы, вероятно, только усугубите ситуацию, поймав такой эксцесс. В приведенной выше статье указывается:

Несмотря на то, что среда CLR препятствует вам наивно ловить CSE, все же не рекомендуется перехватывать слишком широкие классы исключений. Но catch (Exception e) появляется во множестве кода, и маловероятно, что это изменится. Не предоставляя исключений, которые представляют собой поврежденное состояние процесса для кода, который наивно ловит все исключения, вы не позволяете этому кодексу ухудшить ситуацию.

+0

+1. Также стоит отметить, что исключения, наложенные на границы DLL, могут приводить ко всем видам неопределенного поведения. Вряд ли можно надежно поймать их независимо от того, какая техника используется. – stinky472

+1

@ stinky472: Бросание исключений через границы DLL не является проблемой, это происходит постоянно. Проблема неуправляемая и управляемая. –

0
try{ 
    return (22/0); // Cant devise by 0 
}catch (System.DivideByZeroException ZeroEx) //Catch type of exception and assign to variable 
{ 
    Console.WriteLine("Division by zero attempted!"); 
    Console.WriteLine("Are you sure you wish to continue"); 
    string answer = Console.Read(); 
} 

Как и

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