Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как работают интерфейсы в делфи?

42K
20 ноября 2008 года
sergeg
5 / / 17.11.2008
Здравствуйте. Имеется делфи-программа к которой хочу написать плагин. Рекомендуемый производителем плагин (dll) для нее на делфи выглядит следующим образом:

Код:
unit Plugin;


   type
          IPluginInterface = interface(IUnknown)
                 . . .
          end;



          PluginObj = class(TInterfacedObject, IPluginInterface)
                . . .
          end;



   function LoadPlugin() : IPluginInterface
   begin
            . . .
        result = PluginObj.Create;
   end;



   exports LoadPlugin;



помогите пожалуйста узнать механизмы работы интерфейсов и подобных объектов на делфи. как они реализованы в делфи: через vtable или dispatch? в какой литературе искать?
5
21 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: sergeg
помогите пожалуйста узнать механизмы работы интерфейсов и подобных объектов на делфи. как они реализованы в делфи: через vtable или dispatch? в какой литературе искать?


Через vtable, хотя могу ошибаться, давно это было... Делфи... Лучше всего посмотреть дизассемблерный листинг и немного порыться в System.pas, где объявлен TInterfacedObject и IUnknown.
Дельфийский интерфейс - это эквивалент комовскому, при правильной декларации нужно указывать еще и его идентификатор (GUID), тогда точно библиотеки будут работать.
Кроме того, TInterfacedObject реализует подсчет ссылок (не без граблей правда), в большинстве случаев может автоматизировать освобождение ресурсов.

6
21 ноября 2008 года
George
4.1K / / 05.01.2007
лучше почитать Кэнту. Он вполне хорошо и подробно описывает работу с интерфейсами.
14
21 ноября 2008 года
Phodopus
3.3K / / 19.06.2008
Бинарно, интерфейсные объеты Delphi совместимы с COM. Если создаешь объект интерфейса не потомка IDispatch - работают через vtable, если потомка IDispatch, с библиотекой типов - работает через dispatch (а методы IDispatch - также через vtable). Если создашь дуальный интерфейс - будет работать и так, и так.
А читать правильно посоветовали - Кэнту, ну можно и Тейксейру с Пачеком :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог