> Thus users of my binding need a different pragma
> on windows to other platforms.
> How can this be done without changing the code,
> or having two versions of it?
> If only I could rename conventions.
> In C, this is accomplished with cpp using #defines
> in a machine dependent header file.

GNAT 3.10 and later includes a pre-processor for Ada
that is similar in usage to C's but slightly better.
The source is portable and free, in keeping with the
GNAT/FSF philosophy.

Or you could put only the parts that are not portable in
one package, with a portable spec and two versions of the body.

(Note: all uses of "portable" above this line do NOT use
the definition below.)

> Is there a good reason for windows libraries to not use
> C convention?
> Or is it just an accident of Microsoft history?

_Software_Jargon_, Microsoft Press:

 "Portable:  code that requires the user to port to the
  latest release of our operating system and utility
  libraries."