From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: =?UTF-8?Q?Bj=c3=b6rn_Lundin?= Newsgroups: comp.lang.ada Subject: Re: converting pointer to value Date: Fri, 5 Mar 2021 12:02:43 +0100 Organization: A noiseless patient Spider Message-ID: References: <02709d96-50fe-4e87-bdb5-4f430fa2717an@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 5 Mar 2021 11:02:44 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="c9e3b2236f724ff4b8eeba0adbb7f865"; logging-data="26906"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18DXB5N+1u0ZiqoUn8VwPGl" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 Cancel-Lock: sha1:ktuNpXT/eQQDFVNfD4Q3cP8P8LM= In-Reply-To: Content-Language: sv Xref: reader02.eternal-september.org comp.lang.ada:61483 List-Id: Den 2021-03-04 kl. 18:35, skrev Dmitry A. Kazakov: > On 2021-03-04 17:55, Shark8 wrote: > >>> type SQLPOINTER is private; >> .... >>> private >>> type SQLPOINTER is new System.Storage_Elements.Integer_Address; >> >> And here we have SQLPOINTER, which is private, but which is something >> of the same representation that Integer_Address has; let's assume that >> the ADDRESS type is implementation-defined, and a private type. > > SQLPOINTER is System.Address. > >> What does this mean? >> It means that we don't know what the size of ADDRESS (and thus >> SQLPOINTER) actually is, but assuming you're on a 32- or 64-bit >> machine it's likely 2 to 4 times as large as the 16-bit SQLSMALLINT-- >> which is a good indication that a simple UNCHECKED_CONVERSION is the >> wrong answer. > > You need not to know that: > >    declare >       P : SQLPOINTER := ...; >       A : System.Address; >       pragma Import (Ada, A); >       for A'Address use P'Address; >       T : My_Fancy_Object; >       pragma Import (Ada, My_Fancy_Object); >       for T'Address use A; >    begin >       ... -- Use T at P > so I tried this version: procedure Exec (Statement_Handle : in Sqlhstmt) is Rc : Sqlreturn := Sqlexecute (Statement_Handle); Pvalue : aliased Sqlpointer; Sent : Integer := 0; Datalen : Integer := 14; Buffer : String (1..10) := (others => ' '); S_Ptr : Ptr_String; A : System.Address; pragma Import(Ada,A); for A'Address use Pvalue'Address; I : Sqlinteger ; pragma Import(Ada,I); for I'Address use A; begin --test for unset clob Rc := Sqlparamdata (Statement_Handle,Pvalue'Access); Text_Io.Put_Line ("SQLParamData1.2: " & I'Img ); SQLParamData1.2: 4790608 I'm thinking that I may be dealing with a pointer to a pointer here? hmm, needs more testing. I changed the expected value from 5 to 7. Still a bit off... -- Björn