Re[4]: Exception from dll -> dll unload -> AV
От: MasterZiv СССР  
Дата: 05.12.11 08:14
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.