[fpc-devel] Safecall on Linux (and other unices?)

Sven Barth pascaldragon at googlemail.com
Thu Jul 22 21:35:55 CEST 2010


Hi!

Am 22.07.2010 19:05, schrieb José Mejuto:
> Anyway I think the problem is on the XPCOM guys, as they decide to
> "define" safecall with different meanings in different platforms, so
> in Windows it is "stdcall safecall" and in Unix "cdecl safecall"
> (safecall referenced to the postprocessing of nsResult).
>
> To me it smells like everything was designed in Linux and later they
> decide to mimic the Windows Activex in the windows world.
>
> Anyway whichever you decide is OK to me.

I think you (and some others) got something wrong here.

Safecall is a Borland invention and only available in Delphi to simplify 
COM development (see 
http://en.wikipedia.org/wiki/X86_calling_conventions#safecall ). The 
XPCOM guys don't have anything to do with this. They defined all methods 
as stdcall on Windows (as expected on that platform) and as cdecl on 
Linux (also as expected by the platform). Delphi's/FPC's safecall on 
Windows is simply a wrapper around a normal stdcall 
procedure/function/method that throws an exception if the result value 
contains an error (it's an HResult). On all other platforms it's equal 
to the default calling convention (register on i386, cdecl on everything 
else).

So it's perfectly legal for us to define safecall on Linux (which 
doesn't use safecall in any way) as an "exception throwing wrapper" 
around cdecl. The only obstacle here might be the new cross plattform 
compiler from Embarcadero, but that lies in the (though maybe not so 
far) future.

Regards,
Sven



More information about the fpc-devel mailing list