|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.05.2012, 16:40 | #1 |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
Вызов деструктора класса при присвоении реализумому методу итерфейса "nil" при освобождении памяти DLL.
Всем доброго времени суток! Вообщем случилась такая проблема:
пишу программу с поддержкой плагинов. "Общение" между программой и dll осуществляется посредством интерфейсов. Т.е. dll и exe имеют общий файл с описанием интерфейсов. В экспортируемую процедуру из dll передаются ссылки на интерфейсы реализованные в приложении, и возвращаются ссылки реализованные в dll, в общем аналог CallBack процедур. Все хорошо если бы не одно "но". Как только я делаю FreeLibrary загруженной библиотеки, у меня не стого не с сего вызывается деструктор класса в котором реализован интерфейс переданный в dll. Я так понимаю, что когда память занимаемая библиотекой освобождается, автоматически переданному интерфейсу приложения присваивается nil, что и приводит к вызову деструктора. Как это можно побороть? Заранее спасибо! К примеру. Интерфейс Код:
Код:
|
08.05.2012, 11:05 | #2 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Создавайте интерфейсные классы на основе TComponent, а не TInterfacedObject. Последний имеет автоматическую проверку числа ссылок. Когда в приложении создан интерфейс и передан в dll, то в процедуре приложения где он был создан, эта ссылка уничтожается, потому что локальная. Но 2я копия уже в dll. И когда высвобождается dll, то уничтожается и последняя ссылка на интерфейс, и вызывается деструктор. TComponent хорош тем, что его уничтожение нужно вызывать форсированно. Вроде так. Если не прав, форумчане, поправьте меня, буду благодарен.
"ковыряю изнутри" (с)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов | Lanx | Помощь студентам | 0 | 06.04.2011 20:24 |
При запуске ругается:"не хватает памяти..." | kim_klim | Свободное общение | 3 | 19.01.2011 15:39 |
ошибка при обработке функции класса "missing type specifier - int assumed" | askerpro | Общие вопросы C/C++ | 8 | 02.06.2010 23:09 |
Проблема при компиляции в Dev-C++: "инструкция ... обратилась к памяти ... Память не может быть read." | Catharsis | Общие вопросы C/C++ | 3 | 14.05.2010 02:12 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |