tinterface5.pp 789 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. { %VERSION=1.1 }
  2. { %SKIPTARGET=macos }
  3. { On macos it crashes when run.}
  4. {$mode objfpc}
  5. type
  6. IInterface = interface(IUnknown)
  7. procedure mydo;
  8. end;
  9. TMyClass = class(TInterfacedObject, IInterface)
  10. procedure mydo;virtual;
  11. end;
  12. TMyClass2 = class(TMyClass)
  13. i : integer;
  14. end;
  15. TMyClass3 = class
  16. private
  17. fi: IInterface;
  18. public
  19. property intf: IInterface read fi write fi;
  20. end;
  21. var
  22. l : longint;
  23. procedure tmyclass.mydo;
  24. begin
  25. l:=1;
  26. end;
  27. var
  28. c: TMyClass;
  29. c2 : TMyClass;
  30. c3 : TMyClass3;
  31. begin
  32. c := TMyClass.Create;
  33. c3 := TMyClass3.Create;
  34. c3.intf := c;
  35. l:=0;
  36. c3.intf.mydo;
  37. if l<>1 then
  38. halt(1);
  39. c2 := TMyClass2.Create;
  40. c3.intf := c2;
  41. l:=0;
  42. c3.intf.mydo;
  43. if l<>1 then
  44. halt(1);
  45. c3.free;
  46. end.