tclass8.pp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. { %version=1.1 }
  2. {$mode objfpc}
  3. uses
  4. classes;
  5. type
  6. {$M+}
  7. TTestCaseTest = class(TObject)
  8. published
  9. procedure TestSetUp;
  10. procedure TestAsString;
  11. end;
  12. procedure TTestCaseTest.TestSetup;
  13. begin
  14. writeln('TestSetup');
  15. end;
  16. procedure TTestCaseTest.TestAsString;
  17. begin
  18. writeln('TestAsString');
  19. end;
  20. function GetMethodNameTableAddress(AClass: TClass): Pointer;
  21. type
  22. TMethodNameRec = packed record
  23. name : pshortstring;
  24. addr : pointer;
  25. end;
  26. TMethodNameTable = packed record
  27. count : dword;
  28. entries : packed array[0..0] of TMethodNameRec;
  29. end;
  30. pMethodNameTable = ^TMethodNameTable;
  31. var
  32. methodTable : pMethodNameTable;
  33. vmt: TClass;
  34. begin
  35. vmt := aClass;
  36. if assigned(vmt) then
  37. begin
  38. methodTable := pMethodNameTable((Pointer(vmt) + vmtMethodTable)^);
  39. Result := methodTable;
  40. end;
  41. end;
  42. begin
  43. writeln('Address of TestSetUp : ',ptrint(TTestCaseTest.MethodAddress('TestSetUp')));
  44. writeln('Address of TestAsString : ',ptrint(TTestCaseTest.MethodAddress('TestAsString')));
  45. if not (Assigned(GetMethodNameTableAddress(TTestCaseTest))) then
  46. halt(1);
  47. end.