因为使用方法参数的不同, 所以有了调用约定.
譬如 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 |
||||




