unit Plugin;
type
IPluginInterface = interface(IUnknown)
. . .
end;
PluginObj = class(TInterfacedObject, IPluginInterface)
. . .
end;
function LoadPlugin() : IPluginInterface
begin
. . .
result = PluginObj.Create;
end;
exports LoadPlugin;
как работают интерфейсы в делфи?
Код:
помогите пожалуйста узнать механизмы работы интерфейсов и подобных объектов на делфи. как они реализованы в делфи: через vtable или dispatch? в какой литературе искать?
Цитата: sergeg
помогите пожалуйста узнать механизмы работы интерфейсов и подобных объектов на делфи. как они реализованы в делфи: через vtable или dispatch? в какой литературе искать?
Через vtable, хотя могу ошибаться, давно это было... Делфи... Лучше всего посмотреть дизассемблерный листинг и немного порыться в System.pas, где объявлен TInterfacedObject и IUnknown.
Дельфийский интерфейс - это эквивалент комовскому, при правильной декларации нужно указывать еще и его идентификатор (GUID), тогда точно библиотеки будут работать.
Кроме того, TInterfacedObject реализует подсчет ссылок (не без граблей правда), в большинстве случаев может автоматизировать освобождение ресурсов.
лучше почитать Кэнту. Он вполне хорошо и подробно описывает работу с интерфейсами.
А читать правильно посоветовали - Кэнту, ну можно и Тейксейру с Пачеком :)