On 12/04/2011 01:18 PM, Amor wrote:
> MZ>как бы если этот exception определён в этом модуле, то клиенты exception-а
> MZ>(те, кто его использует) будут клиентами и этого модуля.
>
> Так в том-то и дело, что приведенный мной код не является клиентом my_exception.
> Ему нужен Component, он залочил библиотеку, попользовался компонентом, разлочил.
> Точка.
>
> Код catch является клиентом std::exception и ничего об этой DLL не знает.
Если он получает через ссылку на std::exception объект-наследник типа
конкретного эксепшена, который реализован в этом компоненте, то этот
код также является клиентом этого конкретного эксепшена и этого компонента.
В С++ так. Может в других языках было бы по-другому.
>
> MZ>Либо откладывай момент выгрузки .ddl, в Win32 это можно например делать
> MZ>отправкой сообщения (PostMessage) о необходимости выгрузки .ddl.
>
> Тут не понял. Кто кому должен отправить это сообщение?
Какому-то менеджеру компонент, который в нужный момент, потом, выгрузит
указанный компонент.
>
> MZ>Либо выноси исключение в отдельный, используемый всеми и невыгружаемый модуль.
>
> Я вообщем-то тоже прихожу к такому мнению.
> Но это надо бы проверить.
> Если я создам my_exception, который экспортируется из другого модуля, то где
> будет таблица виртуальных функций этого объекта?
В модуле, где реализован этот класс, отку да он экспортируется
class __declspec(dllexport) MyClass
{
//...
};
. тебе какая разница ?
> Уффф... это мне кажется вообще не вариант. Оборачивать каждый вызов?
> Легче уж отказаться от использования исключений между dll и делать все на
> HRESULT-ах.
Почему ? Чё за дурость ? Вечно все почему-то как-то связывают .dll с
невозможностью что-то исползовать. DLL-и ничего использовать не мешают.
Posted via RSDN NNTP Server 2.1 beta