Delphi 3中支持接口的等效方法是什么?

5

我支持一个使用Delphi 3编写的应用程序,我想在等待升级到新版本的Delphi的机会时,在源代码中进行一些改进。其中我想使用的一项是接口。我知道Delphi 3已经有了接口的概念,但我不知道如何做相当于:

if Supports(ObjectInstance, IMyInterface) then

3
这是用于 IUnknown.QueryInterface 的包装器。http://msdn.microsoft.com/en-us/library/ms682521(VS.85).aspx - Free Consulting
1个回答

5

编写自己的“Supports”函数实现。在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中工作


5
最好直接称之为“支持”(Supports),这样当你向前迈进时,只需要删除声明即可,所有调用代码仍然保持不变。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接