Win32API是用堆栈来传递参数的, 调用者把参数一个个压入堆栈, DLL中的函数程序再从堆栈中取出参数处理, 并在返回之前将堆栈中已经无用的参数丢弃。
在Microsoft发布的《Microsoft Win 32 Programmer's Reference》中定义了常用API的参数和函数声明, 先来看消息框函数的声明:
上述函数声明说明了MessageBox有4个参数, 它们分别是HWND类型的窗口句柄(hWnd) , LPCTSTR类型的要显示的字符串地址(Ip Text) 和标题字符串地址(Ip Caption) ,还有UINT类型的消息框类型(u Type) 。这些数据类型看起来很复杂, 但有一点是很重要的,对于汇编语言来说, Win 32环境中的参数实际上只有一种类型, 那就是一个32位的整数, 所有这些HWND, LPCTSTR和UINT实际上就是汇编中的dword(doubleword) , 之所以定义为不同的模样, 是为了说明其用途。可能是因为Windows是用C写成的吧, 或者是因为世界上的程序员用C语言的最多, Windows所有编程资料发布的格式都是用C格式的。
有了函数原型的定义以后,就是调用的问题了,Win32API调用中要把参数放入堆栈,顺序是最后一个参数最先进栈, 在汇编中调用MessageBox函数的方法是:
push uType
push lpcaption
push lpText
push hwnd
call MessageBox
标签:汇编,MessageBox,调用,函数,win32,API,参数,堆栈 From: https://www.cnblogs.com/liming19680104/p/17756861.html