comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Pointer
Date: Mon, 19 May 2008 14:09:57 +0200
Date: 2008-05-19T14:09:57+02:00	[thread overview]
Message-ID: <1qai6h2r4nqaq.ni9tpon7mnav.dlg@40tude.net> (raw)
In-Reply-To: 4831652D.3020507@gmail.com

On Mon, 19 May 2008 11:31:57 +0000, S�bastien wrote:

>> procedure To_String (Pointer : in System.Address; Length : in Natural)
>> return String is
>>    Result : String (1 .. Length);
>>    for Result'Address use Pointer;
>>    pragma Import (Ada, Result); -- suppress default initialization
>> begin
>>    return Result;
>> end To_String;
>> 
>> But Dmitryi's solution is safer, of course. HTH
> 
> Ok, I was not clear enough. Converting char* to String is not an issue, 
> I'm using Interfaces.C.String with no problem. My problem is to convert 
> all the strings in the char** in string one by one.

Aha, it is const char *[] ...

> Something like this:
> CharPtrPtr: System.Address := MyCFunctionReturninCharStarStar;
> N: Natural := MYCFunctionTellingMeHowManyStrings;
> 
> for i in Natural range 0 .. N loop
>     -- Some ada code to convert CharPtrPtr[i] to String
> end loop;

with Interfaces.C.Pointers;
with Interfaces.C.Strings;  use Interfaces.C.Strings;
with Interfaces.C; use Interfaces.C;

type Chars_Ptr_Array is array (size_t range <>) of aliased chars_ptr;
pragma Convention (C, Chars_Ptr_Array);
package Pointers_To_String is
   new Interfaces.C.Pointers (size_t, chars_ptr, chars_ptr_array, null);
use Pointers_To_String;
...   
Data : Pointers_To_String.Pointer := MyCFunctionReturninCharStarStar;
N: Natural := MYCFunctionTellingMeHowManyStrings;
...
for Index in 1..N loop
   declare
      Element : String := Value (Data.all);
   begin
      ... -- Use the element
   end;
   Increment (Data); -- Move to the next one
end loop;

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  parent reply	other threads:[~2008-05-19 12:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-19  9:38 Pointer Sébastien
2008-05-19  9:53 ` Pointer Dmitry A. Kazakov
2008-05-19  9:54   ` Pointer Dmitry A. Kazakov
2008-05-19 10:13   ` Pointer Sébastien
2008-05-19 10:32     ` Pointer Dmitry A. Kazakov
2008-05-19 10:34     ` Pointer Ludovic Brenta
2008-05-19 11:31       ` Pointer Sébastien
2008-05-19 12:09         ` Pointer Ludovic Brenta
2008-05-19 12:09         ` Dmitry A. Kazakov [this message]
2008-05-19 12:47           ` Pointer Sébastien
2008-05-19 16:25         ` Pointer Matthew Heaney
2008-05-19 16:22     ` Pointer Matthew Heaney
2008-05-19 16:17 ` Pointer Matthew Heaney
2008-05-19 17:23   ` Pointer Sébastien
  -- strict thread matches above, loose matches on Subject: below --
2005-08-31 17:02 pointer TC
2005-08-31 18:40 ` pointer Martin Krischik
2005-08-31 18:52 ` pointer 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