深入类中的方法(13)- 方法的调用约定
因为使用方法参数的不同, 所以有了调用约定.
譬如 Delphi 默认的是从左到右读取参数; Window API 是从右到左读取参数.
如果没有调用约定, Delphi 就无法使用由 C 语言编写的 Window API;
如果没有调用约定, 别的语言也无法使用由 Delphi 编写的 DLL 文件中的方法.
指示字 | 参数读取顺序 | 参数删除 | 参数传递 | 备注 |
---|---|---|---|---|
register | 左→右 | 方法返回时自动删除参数 | 前三个参数使用CPU的三个寄存器传递; 其他使用栈传递 | 速度最快, 是 Delphi 的默认方式 |
pascal | 左→右 | 方法返回时自动删除参数 | 使用栈传递参数 | 为兼容存在 |
cdecl | 右→左 | 由调用者在调用返回时从栈中删除参数 | 使用栈传递参数 | 调用来自用 C 或 C++ 编写的共享库, 一般用于非 Windows 操作系统 |
stdcall | 右→左 | 方法返回时自动删除参数 | 使用栈传递参数 | 用于调用 Windows API |
safecall | 右→左 | 方法返回时自动删除参数 | 使用栈传递参数 | 用于调用 Windows 中的双重接口中的方法(除了继承自 IInterface 和 IDispatch 的方法) |
near | Win16 位下的产物, 现在不用了 | |||
far | ||||
export |
编程语言无所谓高低级,唯适用罢了。语言结构再天花乱坠,富丽堂皇终不过CPU上的0和1。