tw14103.pp 787 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. program test;
  2. {$mode objfpc}{$H+}
  3. uses
  4. Classes, SysUtils;
  5. type
  6. TCallback = procedure of object;
  7. { TTestObject }
  8. TTestObject = class (TObject)
  9. public
  10. class procedure Test;
  11. end;
  12. TTestClass = class of TTestObject;
  13. TTestObject2 = class(TTestObject)
  14. end;
  15. { TTestObject }
  16. var
  17. global: boolean;
  18. compareclass: TTestClass;
  19. class procedure TTestObject.Test;
  20. begin
  21. global:=true;
  22. if self <> compareclass then
  23. halt(2);
  24. end;
  25. var
  26. Cls: TTestClass;
  27. Callback: TCallback;
  28. begin
  29. // Doesn't work
  30. global:=false;
  31. Callback := @TTestObject.Test;
  32. compareclass:=TTestObject;
  33. Callback();
  34. if not global then
  35. halt(1);
  36. global:=false;
  37. Callback := @TTestObject2.Test;
  38. compareclass:=TTestObject2;
  39. Callback();
  40. if not global then
  41. halt(1);
  42. end.