在支持接口的Delphi 3中有什么相同之处?

时间:2010-12-02 10:20:50

标签: delphi legacy-code delphi-3

我支持使用Delphi 3编写的应用程序,我希望在等待有机会将其升级到更新版本的Delphi时对源代码进行一些改进。我想要使​​用的一件事是Interfaces。我知道Delphi 3已经有了Interfaces的概念,但我很难找到如何做等效的

if Supports(ObjectInstance, IMyInterface) then

1 个答案:

答案 0 :(得分:5)

编写自己的“支持”功能实现。在Delphi 2009中,您可以使用

function MySupports(const Instance: TObject; const IID: TGUID): Boolean;
var
  Temp: IInterface;
  LUnknown: IUnknown;
begin
  Result:= (Instance <> nil) and
           ((Instance.GetInterface(IUnknown, LUnknown)
             and (LUnknown.QueryInterface(IID, Temp) = 0)) or
            Instance.GetInterface(IID, Temp));
end;

测试:

procedure TForm4.Button3Click(Sender: TObject);
var
  Obj: TInterfacedObject;

begin
  Obj:= TInterfacedObject.Create;
  if MySupports(Obj, IUnknown) then
    ShowMessage('!!');
end;

希望它能在Delphi 3中运行