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

Ome*_*men 5 delphi legacy-code delphi-3

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

if Supports(ObjectInstance, IMyInterface) then
Run Code Online (Sandbox Code Playgroud)

klu*_*udg 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;
Run Code Online (Sandbox Code Playgroud)

测试:

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

begin
  Obj:= TInterfacedObject.Create;
  if MySupports(Obj, IUnknown) then
    ShowMessage('!!');
end;
Run Code Online (Sandbox Code Playgroud)

希望它能在Delphi 3中运行

  • 更好地称之为支持,然后当你向前移动时,你只需要删除声明,所有的调用代码都可以保持不变. (5认同)