1. 程式人生 > 其它 >Delphi 系統[29]關鍵字和保留字 dispinterface、dispid

Delphi 系統[29]關鍵字和保留字 dispinterface、dispid

Delphi 系統[29]關鍵字和保留字 dispinterface、dispid

1、定義:

  • dispinterface :用於宣告一個特定的介面卡介面, 這個介面卡能夠接受標準系統介面中傳入傳出的資料。用 DispInterface 宣告的介面不能被繼承,只能夠被引用。DispInterface 方法只能呼叫,並且必須被動態繫結。可以通過 DispId 為介面內方法分配適配序號。DispInterface 僅能用於 Windows 平臺, 如果在 Linux下進行開發, 則此關鍵字會自動被系統遮蔽。
  • dispid :DispInterface 介面中,用於指定特定的適配序號。在 DispInterface介面中, 適配序號必須是唯一的。如果不指定 DispId,則系統會自動分配適配序號給介面內每一個方法,可以通過適配序號訪問 DispInterface 介面中的方法。

2、示例:

type
  IStringsDisp = dispinterface
    ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}']
    property ControlDefault[Index: Integer]: Olevariant dispid 0; default;
    function Count: Integer; dispid 1;
    property Item[Index: Integer]: Olevariant dispid 2;
    procedure Remove(Index: Integer); dispid 3;
    procedure Clear; dispid 4;
    function Add(Item: Olevariant): Integer; dispid 5;
    function _NewEnum: IUnknown; dispid - 4;
  end;

3、關於dispinterface 和 dispid 的一些說明:

分派介面型別定義自動化物件通過IDispatch實現的方法和屬性。對分派介面方法的呼叫在執行時通過IDispatch的Invoke方法進行路由;類不能實現分派介面。

分派介面型別宣告的形式為:

type interfaceName = dispinterface
 ['{GUID}']
memberList
end;

其中['{GUID}']是可選的,memberList由屬性和方法宣告組成。分派介面宣告類似於常規介面宣告,但它們不能指定祖先。例如:  

type
  IStringsDisp = dispinterface
    ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}']
    property ControlDefault[Index: Integer]: OleVariant dispid 0; default;
    function Count: Integer; dispid 1;
    property Item[Index: Integer]: OleVariant dispid 2;
    procedure Remove(Index: Integer); dispid 3;
    procedure Clear; dispid 4;
    function Add(Item: OleVariant): Integer; dispid 5;

    function _NewEnum: IUnknown; dispid -4;
  end;

3.1 分派介面方法(僅限Windows)

分派介面的方法是對底層IDispatch實現的Invoke方法進行呼叫的原型。要為方法指定自動化分派ID,請在其宣告中包含dispid指令,後跟整數常量;指定已使用的ID會導致錯誤。

分派介面中宣告的方法不能包含dispid以外的指令。引數和結果型別必須是自動的——也就是說,它們必須是Byte、Currency、Real、Double、Longint、Integer、Single、Smallint、AnsiString、WideString、TDateTime、Variant、OleVariant、WordBool或任何介面型別。

3.2 分派介面屬性

分派介面的屬性不包括訪問說明符。它們可以宣告為只讀或只讀。要為屬性指定分派ID,請在其宣告中包含dispid指令,後跟整數常量;指定已使用的ID會導致錯誤。陣列屬性可以宣告為預設值。分派介面屬性宣告中不允許使用其他指令。

  

  

建立時間:2021.08.16  更新時間:

部落格園 滔Roy https://www.cnblogs.com/guorongtao 希望內容對你所有幫助,謝謝!