Вопрос про исключения С++ на arm
От: UncleNick  
Дата: 28.01.09 13:02
Оценка:
Всем привет! Помогите пожалуйста решить проблему.
Проблема следующая. Есть exe и dll, подгруженная в нем. В exe вызывается метод из dll, например так:

try
{
    procFromDll();
}
catch (CMyException* exc)
{
    //обработка и удаление исключения
}


в dll при вызове функции procFromDll происходит примерно следующее:

try
{
    CMyException* exMy;
        exMy = new CMyException;
        throw exMy;
}
catch (CMyException* ex)
{
    throw ex;
}


Первый вызов фунции dll из exe проходит, а вот второй уже падает (с разными ошибками — или AccessViolation, или Stack Overflow, или просто виснет). Причем, если при вызове функции procFromDll в dll оставить только такой код —

CMyException* exMy;
exMy = new CMyException;
throw exMy;


то все работает.
В чем может быть дело и как избежать ошибки (при том что необходимо оставить отлов и перебрасывание исключения, как в первом варианте)?
Re: Вопрос про исключения С++ на arm
От: migel  
Дата: 01.03.09 17:20
Оценка:
Здравствуйте, UncleNick, Вы писали:

UN>Всем привет! Помогите пожалуйста решить проблему.

UN>Проблема следующая. Есть exe и dll, подгруженная в нем. В exe вызывается метод из dll, например так:

UN>
UN>try
UN>{
UN>    procFromDll();
UN>}
UN>catch (CMyException* exc)
UN>{
UN>    //обработка и удаление исключения
UN>}
UN>


Общая практика не приветствует бросание исключений из ДЛЛ.
Re[2]: Вопрос про исключения С++ на arm
От: UncleNick  
Дата: 02.03.09 07:17
Оценка:
Здравствуйте, migel, Вы писали:

M>Общая практика не приветствует бросание исключений из ДЛЛ.


"Общая практика не приветствует" и "не работает" — это несколько разные вещи. В бросании исключений из ДЛЛ в ЕХЕ в принципе нет ничего страшного. Проблема уже разрешилась, все работает.