C
Calling Convention ¶This is the default calling convention used when interfacing to C/C++
routines compiled with either gcc
or Microsoft Visual C++.
In the C
calling convention, subprogram parameters are pushed on the
stack by the caller from right to left. The caller itself is in charge of
cleaning up the stack after the call. In addition, the name of a routine
with C
calling convention is mangled by adding a leading underscore.
The name to use on the Ada side when importing (or exporting) a routine
with C
calling convention is the name of the routine. For
example you should import the C function:
int get_val (long);
from Ada as follows:
function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; pragma Import (C, Get_Val, External_Name => "get_val");
Note that in this particular case, you could have omitted the
External_Name
parameter since, when missing, this parameter is set
to the name of the Ada entity in lower case. When the Link_Name
parameter is missing, as in the above example, this parameter is set
the External_Name
with a leading underscore.
When importing a variable defined in C, you should always use the C
calling convention unless the object containing the variable is part of a
DLL (in which case you should use the Stdcall
calling
convention, Stdcall Calling Convention).