stdcall
Simon Marlow
simonmar at microsoft.com
Tue Jul 22 07:15:44 EDT 2003
> On Saturday 19 July 2003 12:51 am, Ross Paterson wrote:
> > Could the meaning of stdcall be broadened to "the standard calling
> > convention for libraries on the native system", i.e. pascal on Win32
> > (as now) and ccall on Unix? It would save a lot of fuss
> for interfaces
> > to portable libraries.
>
> If I understand you correctly:
>
> 1) Even on Win32, a function defined with type:
>
> rty foo(argtys)
>
> should be called using stdcall.
I don't think that's true. The default calling convention on Windows is
still ccall (known as __cdecl to the C compiler), it's just that
cross-DLL calls are normally done using the __stdcall calling
convention.
On Windows, functions in the C runtime are called using the __cdecl
calling convention. I just tested this by checking the assembly
generated for calling malloc().
Although __stdcall is used more often than __cdecl for library calls on
Windows, it doesn't seem to be used exclusively (someone correct me if
I'm wrong).
So I'd say that specifying a "default" calling convention which maps to
stdcall on Windows and ccall on Unix is probably a bad idea. You've
just got to know which one to use on Windows - this is the job for a
tool which checks the FFI decls against the prototypes.
Cheers,
Simon
More information about the FFI
mailing list