The following rules apply to the STDCALL calling convention:
- All parameters are passed on the stack.
- The parameters are pushed onto the stack in a lexical right-to-left
order.
- The called function removes the parameters
from the stack.
- Floating point values are returned in ST(0), the top register of the floating point register stack. Functions
returning aggregate values return them as follows:
- Size of Aggregate
- Value Returned in
- 8 bytes
- EAX-EDX pair
- 5, 6, 7 bytes
- EAX The address to place the return values is passed as a
hidden parameter in EAX.
- 4 bytes
- EAX
- 3 bytes
- EAX The address to place the return values is passed as a
hidden parameter to EAX.
- 2 bytes
- AX
- 1 byte
- AL
For functions that return aggregates 5, 6, 7 or more than 8 bytes
in size, the address to place the return values is passed as a hidden
parameter, and the address is passed back in EAX.
- STDCALL has the restriction that an unprototyped STDCALL function
with a variable number of arguments will not work.
- Function names are decorated with an underscore prefix, and
a suffix which consists of an at sign (@), followed by
the number of bytes of parameters (in decimal). Parameters of less
than four bytes are rounded up to four bytes. Structure sizes are
also rounded up to a multiple of four bytes. For example, consider
a function fred prototyped as follows:
dcl fred ext entry (fixed bin(31) byvalue, fixed bin(31) byvalue,
fixed bin(15) byvalue);
It would appear as follows in the object module:
_FRED@12
When building export lists in .DEF files, the decorated version of the name should be used.
If you use undecorated names in the DEF file, you must give the
object files to ILIB along with the DEF file. ILIB uses the object
files to determine how each name ended up after decoration.
|
This information center is powered by Eclipse technology. (http://www.eclipse.org)