home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Universal_2092781242007.psc / Assembler / CallbackObj.asm < prev    next >
Assembly Source File  |  2007-12-02  |  1KB  |  36 lines

  1.  
  2. ;******************************************************************************************
  3. ;
  4. ; Wrap a object (cls/frm/ctl) callback from a CDECL or stdcall function
  5. ;
  6. ; v1.00 20071201 Original cut.......................................................... prc
  7. ;******************************************************************************************
  8. ; FASM syntax
  9.  
  10. use32                        ;32bit
  11.  
  12.     mov    eax, esp            ;Save the stack pointer
  13.  
  14.     call    L1                ;Call the next instruction
  15. L1:    pop    edx                ;Pop the return address into edx (edx = L1)
  16.  
  17.     add    edx, (L5-L1)            ;Add the offeset to L5 (edx = L5)
  18.     push    edx                ;Push the return value location
  19.  
  20.     mov    ecx, 55h            ;Number of parameters into ecx, patched at runtime
  21.     jecxz    L3                ;If ecx = 0 (no parameters) jump over the parameter push loop
  22.  
  23. L2:    push    dword [eax + ecx * 4]        ;Push the parameter
  24.     loop    L2                ;Next parameter
  25.  
  26. L3:    push    55555555h            ;Push the object address, patched at runtime
  27.     db    0E8h                ;Op-code for a relative address call
  28.     dd    55555555h            ;Address of target object function, patched at run-time
  29.  
  30.     call    L4                ;Call the next instruction
  31. L4:    pop    edx                ;Pop the return address into edx (edx = L4)
  32.  
  33.     mov    eax, [edx+(L5-L4)]        ;Move the return value stored at L5 to eax
  34.     ret    55h                ;Return to caller, stack adjustment patched at runtime
  35.  
  36. L5:    dd    0                ;Return address of the caller saved here