stdcall
 
Задает соглашение о вызовах STDCALL - стиля в объявлении процедуры

Синтаксис

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

Описание

В декларациях процедур, stdcall указывает, что процедура будет использовать stdcall конвенцию вызова. В конвенции вызова stdcall , любые параметры должны передаваться (заталкиваться в стек) в обратном порядке, то есть справа налево. Процедурам не нужно сохранять регистры EAX, ECX и EDX , а так же они должны подчищать за собой стек (POP любые параметры) перед возвратом.

stdcall не разрешает использовать вариативные объявления процедур (те с последним параметром в списке как "...").

stdcall является конвенцией вызова по умолчанию в Windows, если только другой вызов явно не указан , в том числе с помощью блоков Extern. 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

См. также