comp.lang.ada
 help / color / mirror / Atom feed
From: nobody@REPLAY.COM (Anonymous)
Subject: Re: how to pass access string across pragma C interface?
Date: 1997/06/20
Date: 1997-06-20T00:00:00+00:00	[thread overview]
Message-ID: <199706201302.PAA27925@basement.replay.com> (raw)
In-Reply-To: 866734587.8496@dejanews.com


On Thu, 19 Jun 1997 10:41:08 -0600, burch@cyberhighway.net wrote:

> I'm using Ada83 with the Alsys compiler and I'm having problems getting
> access strings to pass to C char* across the pragma interface call.  What
> kind of type definitions does one have to do on the Ada side to get the
> types to match up?  This is what I've done so far, which gives a
> constraint error on run time.
> 	type string_access_type is access string( 1 ..2048);
> 
> 	function read_func (
>              socket_fd : in integer;
>              buffer : in string_access_type
>              ) return integer;
>         pragma interface ( C , read_func );
>         pragma interface_name( read_func, "read" );
> 
> 			.
> 			.
> 			.
>        begin
> 
> 
>   			.
> 			.
>        status_read := read_func ( socket_fd, buffer );
> 
> the C function "read" is
> 
> int read (int, char*);
> 
> What I'm trying to accomplish is to have "buffer" passed by reference to
> C.  C will go out and get the string from a socket, return, and
> (hopefully) I'll be able to use it back on the Ada side.
> 
> I'm new with with Ada, so any comments for my learning would be
> appreciated.  Thank you in advance.

In Ada 83, you have to define the function as accepting an address:

Buffer : String (1 .. 2048);
..
function Read (Socket : Integer; Buffer : System.Address) return
Integer;
pragma Interface (C, Read);
..
Result := Read (Socket, Buffer (1)'Address);

In Ada (Ada 95, ISO/IEC 8652:1995), you can use an access parameter:

subtype Buffer_String is String (1 .. 2048);

Buffer : aliased Buffer_String;
..
function Read (Socket : Integer; Buffer : access Buffer_String) return
Integer;
pragma Import (C, Read);
..
Result := Read (Socket, Buffer'access);

Jeff Carter  PGP:1024/440FBE21
My real e-mail address: ( carter @ innocon . com )
"Now go away, or I shall taunt you a second time."
Monty Python & the Holy Grail

Posted with Spam Hater - see
http://www.compulink.co.uk/~net-services/spam/






  reply	other threads:[~1997-06-20  0:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-06-19  0:00 how to pass access string across pragma C interface? burch
1997-06-20  0:00 ` Anonymous [this message]
1997-06-22  0:00 ` David C. Hoos, Sr.
1997-06-23  0:00   ` Robert Dewar
1997-06-25  0:00     ` Alan Brain
1997-06-24  0:00 ` Matthew Heaney
replies disabled

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