Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Неуправляемая dll бросает исключения. Как правильно ловить?

518
02 ноября 2012 года
Andreika
101 / / 14.02.2003
Коллеги, извиняюсь, если вопрос уже звучал, пробраться через результаты поиска сходу не удалось.

Есть dll, написанная на чистом c++. Необходимо вызывать ее экспортные методы из c#, но есть загвозка. dll бросает исключения своих типов, там есть класс что-то вроде MyException с разными свойствами, в данном случае интересует LPCSTR Msg и long code.
Бросается просто вот так: throw MyException("блалала", 100);

Вопрос - как правильно ловить такие исключения в управляемом коде. Какого типа объект будет получен в блоке catch и как описать сам блок catch? Что станет с неуправляемой строкой сообщения?
392
02 ноября 2012 года
cronya
421 / / 03.01.2009
Пробовали описать свою исключительную ситуацию?
518
02 ноября 2012 года
Andreika
101 / / 14.02.2003
Цитата: cronya
Пробовали описать свою исключительную ситуацию?



Это как? Исключение в данном случае - это объект, который содержит в себе некоторые свойства. Если его не поймать приложение рухнет. А если поймать, то что именно я должен написать в catch на стороне управляемого кода в C#?

392
03 ноября 2012 года
cronya
421 / / 03.01.2009
Вот пример
Код:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            try
            {
                DoSome();
            }
            catch (NotNullExec e)
            {
                MessageBox.Show(e.Message);
            }          
        }

        private void DoSome()
        {
            int x = 10;
            int y = 0;
            if (y == 0)
            {
                throw new NotNullExec();
            }

        }
       

        private class NotNullExec : System.Exception
        {
            public NotNullExec() { }
            public override string Message
            {
                get
                {
                    return "На ноль делить нельзя";
                }
            }
        }
   }
Тоже самое делаете для своих типов. У вас проблема вообще должна возникать по поводу, как обработать типы, используемые в с++. С этим не подскажу, так как стараюсь не смешивать с++ и с#.
518
06 ноября 2012 года
Andreika
101 / / 14.02.2003
Цитата:
У вас проблема вообще должна возникать по поводу, как обработать типы, используемые в с++. С этим не подскажу, так как стараюсь не смешивать с++ и с#



Вот спасибо, уважаемый. Вы вопрос читали, вообще? Вот зачем было отвечать бесполезной информацией, я обрадовался, смотреть полез....

392
07 ноября 2012 года
cronya
421 / / 03.01.2009
Про маршалинг почитайте.
читать тут и еще тут
297
13 ноября 2012 года
koodeer
1.2K / / 02.05.2009
Начиная с CLR 2.0 неуправляемые исключения оборачиваются в RuntimeWrappedException. В его свойстве WrappedException - объект, пришедший из неуправляемого кода.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог