Здравствуйте, 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-ах.