Subversion Repositories delphiutils

Rev

Rev 41 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit MethodPtr;
  2.  
  3. // Ref: http://www.swissdelphicenter.ch/de/showcode.php?id=1671
  4.  
  5. interface
  6.  
  7. function MakeProcInstance(M: TMethod): Pointer;
  8. procedure FreeProcInstance(ProcInstance: Pointer);
  9.  
  10. implementation
  11.  
  12. // type TMyMethod = procedure of object;
  13.  
  14. function MakeProcInstance(M: TMethod): Pointer;
  15. begin
  16.   // allocate memory
  17.   GetMem(Result, 15);
  18.   asm
  19.     // MOV ECX,
  20.     MOV BYTE PTR [EAX], $B9
  21.     MOV ECX, M.Data
  22.     MOV DWORD PTR [EAX+$1], ECX
  23.     // POP EDX
  24.     MOV BYTE PTR [EAX+$5], $5A
  25.     // PUSH ECX
  26.     MOV BYTE PTR [EAX+$6], $51
  27.     // PUSH EDX
  28.     MOV BYTE PTR [EAX+$7], $52
  29.     // MOV ECX,
  30.     MOV BYTE PTR [EAX+$8], $B9
  31.     MOV ECX, M.Code
  32.     MOV DWORD PTR [EAX+$9], ECX
  33.     // JMP ECX
  34.     MOV BYTE PTR [EAX+$D], $FF
  35.     MOV BYTE PTR [EAX+$E], $E1
  36.   end;
  37. end;
  38.  
  39. procedure FreeProcInstance(ProcInstance: Pointer);
  40. begin
  41.   // free memory
  42.   FreeMem(ProcInstance, 15);
  43. end;
  44.  
  45. end.
  46.