Re[3]: Exception from dll -> dll unload -> AV
От: Amor Россия  
Дата: 04.12.11 09:18
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>как бы если этот exception определён в этом модуле, то клиенты exception-а

MZ>(те, кто его использует) будут клиентами и этого модуля.

Так в том-то и дело, что приведенный мной код не является клиентом my_exception.
Ему нужен Component, он залочил библиотеку, попользовался компонентом, разлочил.
Точка.

Код catch является клиентом std::exception и ничего об этой DLL не знает.

MZ>Либо откладывай момент выгрузки .ddl, в Win32 это можно например делать

MZ>отправкой сообщения (PostMessage) о необходимости выгрузки .ddl.

Тут не понял. Кто кому должен отправить это сообщение?

MZ>Либо выноси исключение в отдельный, используемый всеми и невыгружаемый модуль.


Я вообщем-то тоже прихожу к такому мнению.
Но это надо бы проверить.
Если я создам my_exception, который экспортируется из другого модуля, то где будет таблица виртуальных функций этого объекта?


MZ>Можно ещё (но это вариация на тему выноса исключения) сделать залипуху,

MZ>ловить вокруг этого кода исключение, перекодировать его в другое, общее
MZ>исключение и перебрасывать. Но это для случаев, когда данную .ddl менять нельзя.

Уффф... это мне кажется вообще не вариант. Оборачивать каждый вызов?
Легче уж отказаться от использования исключений между dll и делать все на HRESULT-ах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.