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=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI autolearn=unavailable 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:54:17 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news.tele.dk!small.news.tele.dk!213.56.195.71!fr.usenet-edu.net!usenet-edu.net!enst!enst.fr!not-for-mail From: "M. A. Alves" Newsgroups: comp.lang.ada Subject: Re: Ada Address = C pointer ? Date: Tue, 30 Oct 2001 12:53:01 +0000 (GMT) Organization: ENST, France Sender: comp.lang.ada-admin@ada.eu.org Message-ID: Reply-To: comp.lang.ada@ada.eu.org NNTP-Posting-Host: marvin.enst.fr Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Trace: avanie.enst.fr 1004446456 89547 137.194.161.2 (30 Oct 2001 12:54:16 GMT) X-Complaints-To: usenet@enst.fr NNTP-Posting-Date: Tue, 30 Oct 2001 12:54:16 +0000 (UTC) To: Return-Path: X-X-Sender: In-Reply-To: Errors-To: comp.lang.ada-admin@ada.eu.org X-BeenThere: comp.lang.ada@ada.eu.org X-Mailman-Version: 2.0.6 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: comp.lang.ada mail<->news gateway List-Unsubscribe: , List-Archive: Errors-To: comp.lang.ada-admin@ada.eu.org X-BeenThere: comp.lang.ada@ada.eu.org Xref: archiver1.google.com comp.lang.ada:15404 Date: 2001-10-30T12:53:01+00:00 On Tue, 30 Oct 2001, Lutz Donnerhacke wrote: > 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; Seems right. The C.Pointers tutorial I was missing, thanks a lot. However, I am still not sure of the equivalence between null (a value of Pointer) and NULL (C), i.e. is it garanteed that if the C function returns NULL get_long_array returns null? -- , M A R I O data miner, LIACC, room 221 tel 351+226078830, ext 121 A M A D O Rua Campo Alegre, 823 fax 351+226003654 A L V E S P-4150 PORTO, Portugal mob 351+939354002