From: Eryndlia Mavourneen <eryndlia@gmail.com>
Subject: Re: Passing a String to a C/C++ Subprogram (Special Case)
Date: Tue, 15 Oct 2013 14:02:17 -0700 (PDT)
Date: 2013-10-15T14:02:17-07:00 [thread overview]
Message-ID: <4bb47482-ccb9-4641-a702-2b2978100ff9@googlegroups.com> (raw)
In-Reply-To: <1374ac32-0fb5-4589-a9a5-7740030fd3c6@googlegroups.com>
On Tuesday, October 15, 2013 3:11:30 PM UTC-5, Adam Beneschan wrote:
> On Tuesday, October 15, 2013 12:54:18 PM UTC-7, Eryndlia Mavourneen wrote:
>
> > I have a couple of strings that are bounded; that is, they are essentially fixed-length strings, and I need to pass them as "in" parameters to a subprogram that may or may not be written in C/C++. I don't really want to hassle with the Interfaces packages for this, since the subprogram language is indefinite, and the strings are part of a package that many others likely will want to use, and the strings most likely will be used as standard Ada fixed-length strings.
>
> > Q: Is there any reason that I cannot just declare each of them in this way, assuming the subprogram is written in C/C++:
>
> > . . .
> > A_String : String (1 .. 30);
> > pragma Convention (C, A_String);
> > . . .
> > procedure C_Prog (C_String : in String);
> > pragma Import (Entity => C_Prog, ...);
> > begin
> > C_Prog (C_String => A_String);
> > . . .
>
> > and have it work properly?
>
>
>
> B.3(70) says, "An Ada parameter of an array type with component 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." Since a String is defined as an array of Character in Ada, this should cause a "char*" argument to be passed. However, this is in a section marked "Implementation Advice", so there's a possibility that a particular Ada compiler may not conform. You'll want to check the Ada compiler manual and/or try it yourself and see what code it generates. Note that this means the 'First and 'Last of the string parameter won't be passed to the C routine. But it looks like you know that already.
>
>
>
> -- Adam
Yes, Adam. Thank you. Of course, Annex B is optional anyway. lol
I guess you choose your poison.
-- Eryndlia Mavourneen (KK1T)
next prev parent reply other threads:[~2013-10-15 21:02 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-15 19:54 Passing a String to a C/C++ Subprogram (Special Case) Eryndlia Mavourneen
2013-10-15 20:11 ` Adam Beneschan
2013-10-15 21:02 ` Eryndlia Mavourneen [this message]
2013-10-16 7:17 ` Dmitry A. Kazakov
2013-10-16 15:14 ` Jeffrey Carter
2013-10-16 17:32 ` Martin
2013-10-16 17:42 ` Eryndlia Mavourneen
2013-10-16 17:54 ` Martin
2013-10-16 18:13 ` Eryndlia Mavourneen
2013-10-16 19:40 ` Simon Wright
2013-10-16 20:02 ` Eryndlia Mavourneen
2013-10-19 2:11 ` Randy Brukardt
2013-10-16 19:11 ` Adam Beneschan
2013-10-16 21:31 ` Martin
2013-10-16 21:41 ` Adam Beneschan
2013-10-16 23:15 ` Martin
2013-10-15 20:59 ` Jeffrey Carter
2013-10-15 21:13 ` Eryndlia Mavourneen
2013-10-15 22:19 ` Shark8
2013-10-16 0:00 ` Jeffrey Carter
2013-10-17 9:55 ` Georg Bauhaus
2013-10-16 20:17 ` sbelmont700
2013-10-16 20:48 ` Adam Beneschan
2013-10-17 13:05 ` Eryndlia Mavourneen
2013-10-17 13:58 ` sbelmont700
2013-10-17 16:28 ` Eryndlia Mavourneen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox