Есть хорошая альтернатива, когда вы знаете, что реализующий объект - TComponent
потомок.
Вы можете использовать интерфейс IInterfaceComponentReference
, который определяется в Classes
единицах:
IInterfaceComponentReference = interface
['{E28B1858-EC86-4559-8FCD-6B4F824151ED}']
function GetComponent: TComponent;
end;
И затем он объявляется в TComponent
(и реализуется для возврата self
):
TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)
Так что, если вы знаете , реализующим объектом является TComponent
, тогда вы можете сделать это:
function InterfaceToComponent(const AInterface: IInterface): TComponent;
var
vReference: IInterfaceComponentReference;
begin
if Supports(AInterface, IInterfaceComponentReference, vReference) then
result := vReference.GetComponent
else
result := nil;
end;