stdcall
 
在过程声明中指定stdcall 样式调用约定

语法

Sub name stdcall [Overload] [Alias "alias" ] ( parameters )
Function name stdcall [Overload] [Alias "alias" ] ( parameters ) As return_type

说明

在过程声明中,stdcall指定一个过程将使用stdcall调用约定。在stdcall调用约定中,任何参数将按照它们被列出的相反顺序传递(推入堆栈),即从右到左。程序不需要保留EAXECXEDX寄存器,并且必须在返回之前清理堆栈(弹出任何参数)。

stdcall不允许与可变参数过程声明一起使用(最后一个参数列为“...”))。

stdcall是Windows上的默认调用约定,除非另外一个调用约定被Extern Blocks之一明确指定或暗示。stdcall也是BASIC语言和Windows API中使用的标准(或最常见)调用约定。

例子

Declare Function Example stdcall (param1 As Integer, param2 As Integer) As Integer
Declare Function Example2 cdecl (param1 As Integer, param2 As Integer) As Integer

Function Example stdcall (param1 As Integer, param2 As Integer) As Integer
    '这是一个STDCALL函数,堆栈中的第一个参数是param2,因为它是最后被推送的。
    Print param1, param2
    Return param1 Mod param2
End Function

Function Example2 cdecl (param1 As Integer, param2 As Integer) As Integer
    '这是一个CDECL函数,堆栈中的第一个参数是param1,因为它被最后推送。
    Print param1, param2
    Return param1 Mod param2
End Function


平台差异

  • 在Windows系统上,STDCALL程序在其内部/外部名称中添加了@ N 装饰,其中N 的大小的参数列表,以字节为单位。

与QB差别

  • 新的FreeBASIC

参考