如何通过接口的DispID 获取方法名?
最近研究了Delphi RTTI
想要实现一个类似TAutoObject功能的类
经过以下试验分析
Delphi 的双重接口的调用模式大致如下
//接口 ITest = interface(IDispatch) ['{C8E5E6FF-FBF2-4397-A4F3-8041DF9548E8}'] function Test: Boolean; stdcall; end; {$m-}{$METHODINFO OFF} //disp接口 ITestDisp = dispinterface ['{C8E5E6FF-FBF2-4397-A4F3-8041DF9548E8}'] function Test: Boolean; dispid 500; end; TTest = class(TInterfacedObject, ITest, IDispatch) protected function Test: Boolean; stdcall; function GetTypeInfoCount(out Count: Integer): HResult; stdcall; function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall; function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall; end;//以下是调用var I: ITest; Disp: ITestDisp; V: Variant;begin //用非disp接口调用, 直接执行到 Test 方法内部 I := TTest.Create; I.Test; //用dips接口调用,执行到Invoke,再由 Invoke 执行其它方法 Disp := TTest.Create as ITestDisp; Disp.Test; //用Variant调用,首先执行到 GetIDsOfNames 获取方法ID,然后再执行到 Invoke 再由 Invoke 执行其它方法 V := TTest.Create as ITestDisp; V.Test;end;