Jonas Maebe wrote:
Is this just a mess or do I miss the true logic behind it ?
If you declare an external function/procedure as "cdecl", the compiler
with /always/ add the necessary C-prefix (if any) to the external name.
I see, so if I add
{$ifdef FPC}
{$calling cdecl}
{$endif
and skip the underscore, this results in multi-platform and gpc compatible 'external name xxx"
directives.
The universal interfaces are declared as mwpascal rather than cdecl, and
such functions/procedures do not automatically get the C-prefix
(although one might argue that it would have been better if they did,
and indeed if FPC on all platforms by default prefixed all its symbol
names with the same prefix as the main C compiler(s), but the fact is
that it doesn't do so today -- but maybe this could be changed now that
there still aren't many FPC shared libraries in common use).
Yes.
To make matters even more interesting (in the Chinese sense), there are
also {$mode macpas} interface-only units (i.e., units without an
implementation section, like many of the universal interfaces). Because
this support was added solely for the purpose of supporting (older
versions of) the universal interfaces, in that case any function without
an explicitly specified external name also gets the C-prefix added
(which does not apply to the universal interfaces units, since all
functions/procedures there do have an explicitly specified external name).
Are you saying that adding IMPLEMENTATION BEGIN changes the meaning of the INTERFACE section. That
is hardly a defendable compiler feature, is it ?
Regards,
Adriaan van Os
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal