Delphi и COM


         

Dispinterface


Диспинтерфейс (Dispinterface) — это декларация методов, доступных через интерфейс IDispatch. Диспинтерфейс объявляется следующим образом:

type   IMyDisp = dispinterface     ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}']     property Count: Integer dispid 1     procedure Clear dispid 2;   end;

Сами методы могут физически и не существовать (например, они реализуются динамически в Invoke). Рассмотрим использование диспинтерфейса на простом примере. Объявим диспинтерфейс объекта InternetExplorer и используем его в своей программе:

type   IIE = dispinterface   ['{0002DF05-0000-0000-C000-000000000046}']     property Visible: WordBool dispid 402;   end; procedure TForm1.Button1Click(Sender: TObject); var   II: IIE; begin   II := CreateOleObject('InternetExplorer.Application') as IIE;   II.Visible := TRUE; end;

Эта программа успешно компилируется и работает, несмотря на то, что в интерфейсе объявлено только одно из множества имеющихся свойств и методов. Это возможно благодаря тому, что Delphi не вызывает методы диспинтерфейса напрямую и поэтому не требует полного описания всех методов в правильном порядке. При вызове метода диспинтерфейса Delphi просто вызывает метод Invoke соответствующего интерфейса  IDispatch, передавая ему идентификатор метода, указанный в dispid. В результате программисту становятся доступны возможность строгого контроля типов при вызове методов IDispatch и вызов методов, реализованных в IDispatch, без формирования сложных структур данных для вызова Invoke. Необходимо лишь описать (или импортировать из библиотеки типов сервера) описание диспинтерфейса.

В описании диспинтерфейса допустимо использовать только OLE-совместимые типы данных.



Содержание раздела