Как защитить приложение C# от сбоя при вызове метода в неуправляемой библиотеке DLL?

У меня есть неуправляемая DLL, написанная другим разработчиком на неуправляемом C++. Мое приложение представляет собой приложение WinForms, написанное на C#. Я использую взаимодействие для вызова метода (функции) в родной DLL. Вызов вызывает сбой моего приложения при выполнении метода.

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


person Elan    schedule 06.07.2010    source источник
comment
Как выглядит объявление функции C++ и как выглядит вызов P/Invoke?   -  person Dean Harding    schedule 06.07.2010


Ответы (1)


Вы можете создать отдельный AppDomain и загрузить в него неуправляемую DLL. Если вызов завершится сбоем, это просто приведет к сбою AppDomain, и ваше приложение все еще будет жить.

person Nitin Chaudhari    schedule 06.07.2010
comment
Это не всегда поможет вам. Неуправляемый код по-прежнему может вывести из строя весь процесс, если, например, он разрушает стек, а некоторые другие виды повреждения могут вывести процесс из строя, не позволяя управляемому коду выйти из строя первым. AppDomains — это полностью управляемая конструкция, которая не защищает неуправляемый код. - person Dean Harding; 06.07.2010