[fpc-pascal] inherited interfaces not seen by queryinterface / supports
Tony Whyman
tony.whyman at mccallumwhyman.com
Thu Oct 27 15:01:23 CEST 2016
On 27/10/16 03:47, Graeme Geldenhuys wrote:
> A common misconception about how interfaces work. In fact, I don't
> actually know why FPC and Delphi bother with Interface Inheritance,
> because I simply don't see the point.
> To make your "t_2" class support both interface, you need to specify
> both in the class declaration. Even though i_2 inherits from i_1, both
> i_1 and i_2 must be specified in the t_2 class.
I must be missing something here because interface inheritance seems to
work fine for me e.g.
i1 = interface
procedure Do1;
end;
i2 = interface(i1)
procedure Do2;
end;
TMyObject = class(TInterfacedObject,i2)
public
procedure Do1;
procedure Do2;
end;
var intf: i2;
begin
i2 := TMyObject.Create;
i2.Do1; {seems to work for me}
End;
I have plenty of examples where an interface is inherited and includes
the inherited methods and properties.
I also have cases where e.g.
var SomeInterface: IUnknown;
begin
SomeInterface := TMyObject.Create;
end;
that is the inherited interface is extracted from the object. There are
also useful cases, where e.g.
TMyObject1 = class(TInterfacedObject,i1)
public
procedure Do1;
end;
TMyObject2 = class(TMyObject1,i2)
public
procedure Do2;
end;
That is you can build an object hierarchy to parallel an interface
hierarchy.
I don't use the "Supports" primitive. - so maybe there is a bug in this
feature but otherwise, what is the problem with interface inheritance?
Tony Whyman
MWA
More information about the fpc-pascal
mailing list