From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,fc7fc1b95198137d X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2001-10-30 04:03:01 PST Path: archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsfeed.direct.ca!look.ca!news-FFM2.ecrc.net!news.iks-jena.de!lutz From: lutz@iks-jena.de (Lutz Donnerhacke) Newsgroups: comp.lang.ada Subject: Re: Ada Address = C pointer ? Date: Tue, 30 Oct 2001 12:02:16 +0000 (UTC) Organization: IKS GmbH Jena Message-ID: References: NNTP-Posting-Host: belenus.iks-jena.de X-Trace: branwen.iks-jena.de 1004443336 3411 217.17.192.34 (30 Oct 2001 12:02:16 GMT) X-Complaints-To: usenet@iks-jena.de NNTP-Posting-Date: Tue, 30 Oct 2001 12:02:16 +0000 (UTC) User-Agent: slrn/0.9.6.3 (Linux) Xref: archiver1.google.com comp.lang.ada:15401 Date: 2001-10-30T12:02:16+00:00 List-Id: * M. A. Alves wrote: >I am in fact using Address and Access_To_Address_Conversions(*) because I >simply did not find out how to do the trick otherwise. For example, the C >function is returning an array of unsigned long. I want to access that >array without copying it. How can you do that with Interfaces.C.Strings >or even Interfaces.C.Pointers? How about: with Interfaces.C.Pointers; procedure t is type long_array is array (Integer range <>) of aliased Interfaces.C.long; package long_pointers is new Interfaces.C.Pointers ( Index => Integer, Element => Interfaces.C.long, Element_Array => long_array, Default_Terminator => 0 ); function get (a : long_pointers.Pointer; i : Interfaces.C.ptrdiff_t) return Interfaces.C.long is use type long_pointers.Pointer; v : long_array (1 .. 1) := long_pointers.Value (a + i, Interfaces.C.ptrdiff_t (1)); begin return v (1); end get; pragma Inline (get); -- real work starts here function get_long_array return long_pointers.Pointer; pragma Import (C, get_long_array); my_array : constant long_pointers.Pointer := get_long_array; begin ... := get (my_array, 4); end t;