Когда вы объявляете подпрограмму, вы можете указать соглашение о вызове подпрограмм, используя одну из следующих директив: register, stdcall, pascal, cdecl,safecall.
Директива, определяющая правила вызова, помещается в заголовок подпрограммы, например:
procedure Proc; register;function Func(X: Integer): Boolean; stdcall; |
Соглашения о вызове подпрограмм определяют порядок передачи параметров.
1. Директива register задействует регистры процессора для передачи параметров и поэтому обеспечивает наиболее эффективный способ вызова подпрограмм. Эта директива применяется по умолчанию.
2. Директива stdcall используется для вызова стандартных подпрограмм операционной системы.
3. Директивы pascal и cdecl используются для вызова подпрограмм, написанных на языках Delphi и C/C++ соответственно.
Коротко:
Directive Parameter order Clean-up Passes parameters in registers?
register Left-to-right Routine Yes
pascal Left-to-right Routine No
cdecl Right-to-left Caller No
stdcall Right-to-left Routine No
safecall Right-to-left Routine No
|
Более подробно рассмотрим позже (динамически загружаемые библиотеки)