|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.01.2013, 09:48 | #1 |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
Получить по ссылке на интерфейс указатель на класс в котором он реализован
Доброго времени суток.
Есть у меня задача, которая связана с использованием интерфейсов. Реализовывают интерфейсы разные классы. Вопрос в том, как имея ссылку на интерфейс получить указатель на класс в котром он реализован и вызвать метод Free. Пока делаю это, описывая интерфейсную функцию Код:
Код:
Еще нагуглил такой код, который предположительно возвращает указатель на класс по ссылке на интерфейс, проверял - работает, но как-то не внушает доверия. Код:
Буду благодарен за любую помощь. |
24.01.2013, 09:54 | #2 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
24.01.2013, 10:30 | #3 | |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
Цитата:
_AddRef _Release которые не проводят подсчет ссылок или он попросту унаследован от TComponent, то этот метод присвоения указателю интерфейса nil не вызовет деструктор класса. |
|
24.01.2013, 10:46 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
А вы объект наследуйте от TInterfacedObject и вашего IMySomeInterface
|
24.01.2013, 10:48 | #5 |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
|
24.01.2013, 10:55 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Почитайте о правильном использовании интерфейсов и ссылок на них, а также связи интерфейса и класса, в результате которой класс, сам, уничтожается при уничтожении ссылки на интерфейс. Долго рассказывать зачем.
|
24.01.2013, 11:42 | #7 | |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
Цитата:
На данный момент передо мной стоит задача в разработке плагинной системы. Суть проста - в dll имеем класс, который может реализовывать любой интерфейс. В приложении получаем ссылку на этот интерфейс, вызываем необходимые методы и после этого имеется необходимость уничтожить класс, который реализует ранее запрошенный интерфейс. Если наследоваться от TInterfaceObject, то как показывает практика иногда ссылкам на интерфейс необдуманно присваивают nil (бывают разработчики плагинов не знающие, что так делать нельзя, пока интерфейс еще нужен), что вызывает деструктор реализуемого класса и в последующем AV. Вот собственно и поэтому предопределены методы подсчета ссылок. |
|
24.01.2013, 11:48 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Вы не правильно его реализовываете. Вот к сведению... как-раз по вашей части.
http://www.gunsmoker.ru/2011/12/delphi.html |
24.01.2013, 11:51 | #9 | |
Пользователь
Регистрация: 27.10.2011
Сообщений: 50
|
Цитата:
|
|
24.01.2013, 12:06 | #10 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вложенный класс в шаблон. Указатель на вложенный класс в возвращаемом значении метода шаблона. Что делать? | Asya1994 | Помощь студентам | 3 | 09.12.2012 01:43 |
Присваивание ссылки на класс интерфейсной ссылке | Aleks26 | Общие вопросы Delphi | 4 | 11.04.2012 18:43 |
Функционал программы должен быть реализован как класс, размещенный в отдельном модуле. | Сейвс | Помощь студентам | 0 | 29.02.2012 10:12 |
Указатель на абстрактный класс | zhenya.ya | Общие вопросы C/C++ | 0 | 11.11.2010 23:51 |
Указатель на класс | Колючка* | Общие вопросы Delphi | 8 | 21.01.2010 07:38 |