Диспинтерфейс (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-совместимые типы данных.
![]() |
![]() |