Quick start manual
Procedures and functions
6-5
Declaring procedures and functions
If the function exits without assigning a value to Result or the function name, then the
function’s return value is undefined.
Calling conventions
When you declare a procedure or function, you can specify a calling convention using
one of the directives register, pascal, cdecl, stdcall, and safecall. For example,
function MyFunction(X, Y: Real): Real; cdecl;
ƒ
Calling conventions determine the order in which parameters are passed to the
routine. They also affect the removal of parameters from the stack, the use of registers
for passing parameters, and error and exception handling. The default calling
convention is register.
•The register and pascal conventions pass parameters from left to right; that is, the
left most parameter is evaluated and passed first and the rightmost parameter is
evaluated and passed last. The cdecl, stdcall, and safecall conventions pass
parameters from right to left.
• For all conventions except cdecl, the procedure or function removes parameters
from the stack upon returning. With the cdecl convention, the caller removes
parameters from the stack when the call returns.
•The register convention uses up to three CPU registers to pass parameters, while
the other conventions pass all parameters on the stack.
•The safecall convention implements exception “firewalls.” On Windows, this
implements interprocess COM error notification.
The table below summarizes calling conventions.
The default register convention is the most efficient, since it usually avoids creation
of a stack frame. (Access methods for published properties must use register.) The
cdecl convention is useful when you call functions from shared libraries written in C
or C++, while stdcall and safecall are recommended, in general, for calls to external
code. On Windows, the operating system APIs are stdcall and safecall. Other
operating systems generally use cdecl. (Note that stdcall is more efficient than cdecl.)
The safecall convention must be used for declaring dual-interface methods (see
Chapter 10, “Object interfaces”). The pascal convention is maintained for backward
compatibility. For more information on calling conventions, see Chapter 12,
“Program control”.
Table 6.1 Calling conventions
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