comp.lang.ada
 help / color / mirror / Atom feed
From: "Egil H. H�vik" <egil.harald.hoevik@REMOVEkongsberg.com>
Subject: Re: Interfacing with C: access/out parameters
Date: Tue, 31 Aug 2004 09:54:51 +0200
Date: 2004-08-31T09:54:51+02:00	[thread overview]
Message-ID: <41342a34@193.71.169.73> (raw)
In-Reply-To: 2ph6fjFkpsahU1@uni-berlin.de


"Jano" <notelacreas@porfavor.no> wrote in message
news:2ph6fjFkpsahU1@uni-berlin.de...
> Hi,
<snip>
>
> function Blah (Datum : access Data) return C.Int;
> pragma Import (C, Blah);
>
>
> Procedure Ada_Blah (Datum : out Data);
> -- May raise some exception
>
> And my doubt, finally, is: can I ensure somehow that Datum is passed by
> reference?, so I can do inside Ada_Blah [1]:
>
> Helper : aliased Datum;
> For Helper'Address use Datum'Address;
> if Thin_Package.Blah (Helper'Access) = Error_Value then
>     raise My_Error;
> end if;
>

Well, you say Data is a record type, so what's wrong with:

procedure Ada_Blah( Datum : out Data ) is
   function Blah( Datum : Data ) return C.int;
   pragma Import( C, Blah );
begin
   if Thin_Package.Blah(Datum) = Error_Value then
      raise My_Error;
   end if;
end Ada_Blah;


B.3(65): "An Ada function corresponds to a non-void C function"
B.3(69): "An Ada parameter of a record type T, of any mode, is passed as a
t* argument
   to a C function, where t is the C type corresponding to the Ada type T."


~egilhh





  parent reply	other threads:[~2004-08-31  7:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-30 17:30 Interfacing with C: access/out parameters Jano
2004-08-30 19:06 ` Jeffrey Carter
2004-08-31  9:41   ` Alex R. Mosteo
2004-08-31  9:48     ` Alex R. Mosteo
2004-08-31 18:26     ` Jeffrey Carter
2004-09-01  9:46       ` Alex R. Mosteo
2004-08-31  7:54 ` Egil H. H�vik [this message]
2004-08-31  9:11   ` Egil H. H�vik
replies disabled

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