Delphi 中不需要建立ActiveX Library,不需要編輯TLB也能創建一個自動化對象。
秘密就在於$METHODINFO這個沒有文檔描述的編譯指令。
首先我們定義一個TScriptableObject,繼承自TObjectDispatch (ObjComAuto.pas)
{$METHODINFO ON}
TScriptableObject = class(TObjectDispatch)
public
constructor Create;
end;
{$METHODINFO OFF}
....
{ TScriptableObject }
constructor TScriptableObject.Create;
begin
inherited Create(Self, False);
end;
因此, TScriptableObject 便是一個具備了特殊能力的一個類,這個類是具有IDispatch接口的類, 並且繼承自TScriptableObject 的任何子類的Public & Published方法都能夠從GetIDsOfNames檢索出來並且可以Invoke。
這樣創建出的TScriptableObject的子類,就是我們所需要的自動化對象,這個對象我們可以用來作為WebBrowser的IDocHostUIHandler接口的GetExternal所需的IDispatch對象