comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen.a.leake.1@gsfc.nasa.gov>
Subject: Re: Win32 binding
Date: 23 Apr 2002 12:06:07 -0400
Date: 2002-04-23T16:12:18+00:00	[thread overview]
Message-ID: <uvgaio0wg.fsf@gsfc.nasa.gov> (raw)
In-Reply-To: aa39vt$4aj$1@nsnmpen2-gest.nuria.telefonica-data.net

"Antonio L�pez" <alm@gtd.es.REMOVE> writes:

> I am using the Win32 binding that comes with the Gnat compiler in order to
> interface with the API of a Dll.
> 
> When searching for an use example of "type    ULONG_Array is array (Natural
> range <>) of aliased ULONG;", I found only one in win32-rpcndr.ads.
> However instead of declare an array, it declares the elements alone, calling
> for "storage unit bounday".

the keyword "aliased" in the definition of ULONG_Array means that the
compiler must be able to provide pointers to the elements of the
array. In practice this means they elements must be directly
addressable, which means they must start on storage unit boundaries.
"storage unit boundaries" is the precise term for the common notion of
"byte" or "memory location".

For example, if the elements of the array were 4 bits, you could pack
two into a single byte; then the elements would _not_ be directly
addressable, so the keyword "aliased" forbids this packing.

However, in this particular case, the elements are 32 bit integers,
and there is no reason not to align them on byte boundaries, so I
don't think the comment in win32-rpcndr.ads is meaningful. Hmm, it
might have some impact on a machine that had 16 or 32 bit storage
units, but I'm not aware of Windows ports to any such machines!

> I have searched for "storage unit bounday", but I don0t understant
> the concept and/or the problem. Can some enlight me, please?
> 
> Cheers,
> Antonio
> 
> 
> --  Reserved              : Win32.ULONG_Array(0..6);  -- rpcndr.h:802
> --  @@ with GNAT the type ULONG_Array must be aligned at a storage
> --  unit boundary. So I decided for now to declare Reserved<1..7>
> --  instead.
>          Reserved1 : Win32.ULONG;
>          Reserved2 : Win32.ULONG;
>          Reserved3 : Win32.ULONG;
>          Reserved4 : Win32.ULONG;
>          Reserved5 : Win32.ULONG;
>          Reserved6 : Win32.ULONG;
>          Reserved7 : Win32.ULONG;
>       end record;
> 
> 
> 

-- 
-- Stephe



  reply	other threads:[~2002-04-23 16:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-23  9:37 Win32 binding Antonio L�pez
2002-04-23 16:06 ` Stephen Leake [this message]
2002-04-23 17:22   ` Gary Scott
2002-04-24 10:46   ` Antonio López
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox