12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- { %version=1.1 }
- {$mode objfpc}
- uses
- classes;
- type
- {$M+}
- TTestCaseTest = class(TObject)
- published
- procedure TestSetUp;
- procedure TestAsString;
- end;
- procedure TTestCaseTest.TestSetup;
- begin
- writeln('TestSetup');
- end;
- procedure TTestCaseTest.TestAsString;
- begin
- writeln('TestAsString');
- end;
- function GetMethodNameTableAddress(AClass: TClass): Pointer;
- type
- TMethodNameRec = packed record
- name : pshortstring;
- addr : pointer;
- end;
- TMethodNameTable = packed record
- count : dword;
- entries : packed array[0..0] of TMethodNameRec;
- end;
- pMethodNameTable = ^TMethodNameTable;
- var
- methodTable : pMethodNameTable;
- vmt: TClass;
- begin
- vmt := aClass;
- if assigned(vmt) then
- begin
- methodTable := pMethodNameTable((Pointer(vmt) + vmtMethodTable)^);
- Result := methodTable;
- end;
- end;
- begin
- writeln('Address of TestSetUp : ',ptrint(TTestCaseTest.MethodAddress('TestSetUp')));
- writeln('Address of TestAsString : ',ptrint(TTestCaseTest.MethodAddress('TestAsString')));
- if not (Assigned(GetMethodNameTableAddress(TTestCaseTest))) then
- halt(1);
- end.
|