tlwh163 发表于 前天 18:52

任意参数回调的函数指针

突然想的一个点子 不知道是否可行我觉得这样连cdecl的函数 我都敢去调用 只要参数不超过10个。。。

    Asm          '这个可以支持多达10个参数的任意回调函数(回调函数的参数数量可以随意)
      push ebp;mov ebp, esp;Sub esp, 16 + 40
      
      movDWORD Ptr , eax      '保存eax
      movDWORD Ptr , ecx      '保存ecx
      movDWORD Ptr , esi      '保存esi
      movDWORD Ptr , edi      '保存edi
      
      leaedi,       
      leaesi,
      movecx, 10                        '复制 10个参数到 新开的栈区
      repmovsd

      leaedi,
      movecx, 10                        '置零 10个参数的 栈空间
      moveax, 0
      repstosd
      
      moveax, DWORD Ptr       '还原eax
      movecx, DWORD Ptr       '还原ecx
      movesi, DWORD Ptr       '还原esi
      movedi, DWORD Ptr       '还原edi
      
      Call DWORD Ptr             '调用 回调函数
      
      movesp, ebp;pop ebp;ret 44
    End Asm

tlwh163 发表于 前天 18:55

'Dim FAddr As Long : FAddr = Cast(Long, @ANY_FUNC)
'Print "调用 CallWindowProc ", CallWindowProcW(Cast(any Ptr, FAddr), Cast(hWnd, 1), 2, 4, 8)
'Print "调用 VB6_CALLBACK   ", VB6_CALLBACK(FAddr, 1, 2, 4, 8)
Function ANY_FUNC(a1 As Long, a2 As Long, a3 As Long, a4 As Long) As Long
    Return (a1 + a2 + a3 + a4)
End Function

gujin163 发表于 昨天 10:27

啥也不说了,帖子就是带劲!
页: [1]
查看完整版本: 任意参数回调的函数指针