comp.lang.ada
 help / color / mirror / Atom feed
From: Dave Thompson <david.thompson1@worldnet.att.net>
Subject: Re: Returning data from Ada to C
Date: Mon, 16 May 2005 04:35:38 GMT
Date: 2005-05-16T04:35:38+00:00	[thread overview]
Message-ID: <vv5g815hgchp241e34go6f91uprsm30a9e@4ax.com> (raw)
In-Reply-To: 9vYde.5480$GQ5.3731@newsread1.news.pas.earthlink.net

On Wed, 04 May 2005 04:49:09 GMT, Jeffrey Carter <spam@spam.com>
wrote:

> igor.kh@gmail.com wrote:
> >   /* BTW, is it OK to use Ada allocated memory after `adafinal()'? */
> 
> No.
> 
> >   sols : C_Double_Array; -- This is probably wrong, but `sols' will be
> >                          -- a C_Double_Array of some size.
> 
> This won't compile. C_Double_Array is an unconstrained array type. 
> Objects must be constrained. You probably need
> 
> Sols : aliased C_Double_Array (<your constraint here);
> 
> > -- Now I want to return `rcnt' and `sols'
> >   rcnt := rc;                -- This is the easy part.
> >   solvec := ???              -- What goes here?
> 
> Solvec := Sols'Unchecked_Access;

Not if Sols is a procedure-local variable, as in the OP's code, and
the (C) caller intends to dereference the resulting pointer, as it
does. For the storage to remain valid for the caller to access, it
needs either to be (in a package) at library level, or dynamically
allocated in Ada by 'new' (and some provision e.g. another callable
Ada routine for deallocating it if necessary) or by hand-built Ada
call to C's malloc in which case the C code can safely free() it.

These considerations are the same if the called code were C instead of
Ada, except that C has file-scope static instead of package, and the
additional very slightly different option of procedure-local static.

- David.Thompson1 at worldnet.att.net



  parent reply	other threads:[~2005-05-16  4:35 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-03 23:49 Returning data from Ada to C igor.kh
2005-05-04  4:49 ` Jeffrey Carter
2005-05-04 13:45   ` Igor Khavkine
2005-05-04 13:58     ` Alex R. Mosteo
2005-05-06  3:36     ` Jeffrey Carter
2005-05-07 22:12       ` igor.kh
2005-05-08  2:07         ` Jeffrey Carter
2005-05-08 19:58           ` Jeffrey Carter
2005-05-08  9:41         ` Martin Dowie
2005-05-08 14:55           ` Ludovic Brenta
2005-05-08 14:58             ` Ludovic Brenta
2005-05-09 22:49               ` igor.kh
2005-05-10 12:48                 ` Ludovic Brenta
2005-05-16  4:35   ` Dave Thompson [this message]
2005-05-16  5:03     ` Jeffrey Carter
replies disabled

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