program Test; type IMyInterface = interface(IUnknown) ['{E7AA427A-0F4D-4A96-A914-FAB1CA336337}'] procedure P(X, Y: Integer); cdecl; end; TMyClass = class(TInterfacedObject, IMyInterface) procedure P(X, Y: Integer); cdecl; destructor Destroy; override; end; procedure TMyClass.P(X, Y: Integer); begin writeln(Self.ClassName); writeln(X, ' ', Y); end; destructor TMyClass.Destroy; begin writeln('Done'); inherited; end; var I: IMyInterface; X: TMyClass; begin X := TMyClass.Create; I := X; I.P(3, 4); end.