这是函数参数的压栈方式。Delphi缺省的是register,C缺省的是cdecl。
除了写DLL,一般都用stdcall,其他时候就不用考虑了。
除了写DLL,一般都用stdcall,其他时候就不用考虑了。
解决方案 »
- 要过年了,给D版忙了一年的兄弟们发点响 :)
- 关于窗体ShowModal的问题
- DBnavigator的确认删除对话框能不能换成自己设计的啊?
- 为什么这个语句在sql server中运行正常,而在acess中却提示语法错误?
- 用TMediaPlayer控件播放 mp3怎么让它自动循环播放啊?
- 如何使用treeview控件的一些属性?
- 软件界面处理问题,急
- 利用Tquickrep做打印报表时,如何画表格
- 请问用finddialog如何实现向上查找?
- 各位DELPHI高手,有个数据表记录太多,所以我用QUERY控件SELECTTOP 50 * FROM 表名但是设置REQUESTLIVE为TRUE就出错了,请问我怎么办?
- 怎么没人回答,送分都不要?
- 白送分的问题!
pascal 指示编译器从左到右读取参数,不通过寄存器
cdecl 指示编译器从右到左读取参数,不通过寄存器
stdcall 指示编译器从右到左读取参数,不通过寄存器
safecall 指示编译器从右到左读取参数,不通过寄存器
这里的stdcall有什么用呢?
比如
调用SubRouting(Var1,Var2,Var3),编译后的最终代码为
push Var3
push Var2
push Var1
call SubRouting
add esp,12
也就是说,调用者首先把参数压入堆栈,然后调用子程序,在完成后,由于堆栈中先前压入的数不再有用,调用者或者被调用者必须有一方把堆栈指针修正到调用前的状态。
如声明了stdcall,则由被调用者负责清除堆栈,否则由调用者清除堆栈
--这是从罗云彬的编程乐园看到的,