任意参数回调的函数指针
突然想的一个点子 不知道是否可行我觉得这样连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 '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 啥也不说了,帖子就是带劲!
页:
[1]