comp.lang.ada
 help / color / mirror / Atom feed
From: twolf@acm.org (Thomas Wolf)
Subject: Re: Interface to C; Storage_Error
Date: Wed, 20 Dec 2000 11:39:52 GMT
Date: 2000-12-20T11:36:49+00:00	[thread overview]
Message-ID: <3a409667.1742507013@paragate1> (raw)
In-Reply-To: 91ondg$lpu$1@nnrp1.deja.com

On Tue, 19 Dec 2000 22:28:11 GMT, 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?

Name most certainly cannot be alloc'd by that C routine (it's a
"char *" passed by value). Your Ada interface however passes a 
"char **"...

I'd start there for looking for errors. What does the spec
(if it exists) for the C routine say about that argument? Is
it really a "char *"? If so, change the Ada declaration to
"Name : in chars_ptr". What does it have to point to upon entry?
What does the routine do with the memory pointed to? (How large
must the memory area pointed to by Name be?)

If the C routine really allocs Name, the C parameter type most
probably is "char **"...

--
Thomas Wolf
-- 
Dr. Thomas Wolf (twolf@acm.org)



  parent reply	other threads:[~2000-12-20 11:39 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
2000-12-20  8:55   ` Robert Dewar
2000-12-20 11:39 ` Thomas Wolf [this message]
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