comp.lang.ada
 help / color / mirror / Atom feed
From: Ted Dennison <dennison@telepath.com>
Subject: Re: Interface to C; Storage_Error
Date: Wed, 20 Dec 2000 03:52:32 GMT
Date: 2000-12-20T03:52:32+00:00	[thread overview]
Message-ID: <91padu$572$1@nnrp1.deja.com> (raw)
In-Reply-To: 91ondg$lpu$1@nnrp1.deja.com

In article <91ondg$lpu$1@nnrp1.deja.com>,
  Chris <enderx12@my-deja.com> wrote:

>   typedef void* SRV_HANDLE;
>   typedef void* CTX_HANDLE;
>   typedef void* RSLT_HANDLE;
>   typedef void* FLT_HANDLE;
>
>    int GetNextVal(SRV_HANDLE srv, RSLT_HANDLE rslt, CTX_HANDLE *ctx,
>                   char* name, double* dbl, FLT_HANDLE flt);
>
> My take on it in Ada (GNAT 3.13p) is:
>
>    type Srv_Handle is new System.Address;
>    -- same for the other handles
>
>    procedure GetNextVal(Ret  : out int;
>                         Srv  : Srv_Handle;
>                         Rslt : Rslt_Handle;
>                         Ctx  : access Ctx_Handle;
>                         Name : out chars_ptr;
>                         Dbl  : access double;
>                         Flt : Flt_Handle);
>    pragma Import(C, GetNextVal);
>    pragma Import_Valued_Procedure(GetNextVal);
>
> Both Name and Dbl are supposedly set/alloc'd by the library. When I
> call this, it raises Storage_Error on the library call. I am totally
> stumped as to what to fix, or even where to look. Is my Ada declaration
> even remotely correct?
> Other suggestions?

One thing I should mention first off, is that pragma
Import_Valued_Procedure is a gnat-specific pragma (borrowed from the
late-great DECAda). If there is any chance at all that this code may
ever be ported to a different compiler, I would stick to pragma Import.

That brings me to the second issue; pragma Import does essentially the
same job as pragma Import_Valued_Procedure. Check the gnat docs, but it
seems wrong to me that they are being used together.

As for the rest, I'd need to see at least the call that is blowing up
(or is it a later use of one of the parameters that is blowing up?). The
interface description of that C call would be useful too. In my
experience that error is likely to occur because C (or the linkage
between them) is trying to dereference a null pointer or use a numeric
value as a pointer. But it could be that you are misusing a returned
pointer value. It could be that you didn't properly obtain one of those
handles...

--
T.E.D.

http://www.telepath.com/~dennison/Ted/TED.html


Sent via Deja.com
http://www.deja.com/



  reply	other threads:[~2000-12-20  3:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-12-19 22:28 Interface to C; Storage_Error Chris
2000-12-20  3:52 ` Ted Dennison [this message]
2000-12-20  8:55   ` Robert Dewar
2000-12-20 11:39 ` Thomas Wolf
2000-12-20 17:05   ` Chris
2000-12-20 23:57     ` Chris
2000-12-21 15:35       ` Thomas Wolf
2000-12-21 18:07         ` Chris
2000-12-21  3:25 ` DuckE
2000-12-21 11:38   ` Robert Dewar
2000-12-23  2:45     ` DuckE
replies disabled

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