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=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,b52de9e030c4b536,start X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!postnews.google.com!i29g2000prf.googlegroups.com!not-for-mail From: axtens Newsgroups: comp.lang.ada Subject: Q re how to do pointer access in Ada (newbie) Date: Mon, 26 Nov 2007 00:35:39 -0800 (PST) Organization: http://groups.google.com Message-ID: <3b81f333-a350-40f5-91b1-ea45ad58cd6f@i29g2000prf.googlegroups.com> NNTP-Posting-Host: 165.228.152.196 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1196066140 6648 127.0.0.1 (26 Nov 2007 08:35:40 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Mon, 26 Nov 2007 08:35:40 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: i29g2000prf.googlegroups.com; posting-host=165.228.152.196; posting-account=1W9SuAoAAAApKJ8N7QNszANYOyWIVzjG User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9,gzip(gfe),gzip(gfe) Content-Disposition: inline Xref: g2news1.google.com comp.lang.ada:18622 Date: 2007-11-26T00:35:39-08:00 List-Id: G'day everyone! In my current DLL project, I'm passing from VB6 to the Ada DLL a variety of addresses: VARPTRs to LONG, to DOUBLE, to a TYPE which is two LONGs, and a TYPE which is two DOUBLEs. Assuming these arrive in to an Ada function with a parameter defined as Win32.LONG, what would be the best way of converting that LONG to something which can be used to extract the data to which it points? The VB code below is conceptual, in the sense that I still don't have a DLL to link it to. However, this is the direction I'm heading, and I want to know if it's achievable, and how best to achieve it. Kind regards, Bruce. Declare Function Distance Lib "IntervalComputations.dll" (ByVal iType As Long, ByVal Left As Long, ByVal Right As Long) As Long 'other interval functions similarly declared Const LongIntervals = 0, FloatIntervals = 1 Const LeftIsInterval = 2, RightIsNumber = 0 Const RightIsInterval = 4, LeftIsNumber = 0 Dim LongIntervalInterval As Long Dim LongIntervalNumber As Long Dim LongNumberInterval As Long Dim LongNumberNumber As Long Dim FloatIntervalInterval As Double Dim FloatIntervalNumber As Double Dim FloatNumberInterval As Double Dim FloatNumberNumber As Double LongIntervalInterval = LongIntervals Or LeftIsInterval Or RightIsInterval ' 000b or 010b or 100b = 110b = 6 LongIntervalNumber = LongIntervals Or LeftIsInterval Or RightIsNumber ' 000b or 010b or 000b = 010b = 2 LongNumberInterval = LongIntervals Or LeftIsNumber Or RightIsInterval ' 000b or 000b or 100b = 100b = 4 LongNumberNumber = LongIntervals Or LeftIsNumber Or RightIsNumber 'error state ' 000b or 000b or 000b = 000b = 0 FloatIntervalInterval = FloatIntervals Or LeftIsInterval Or RightIsInterval ' 001b or 010b or 100b = 111b = 7 FloatIntervalNumber = FloatIntervals Or LeftIsInterval Or RightIsNumber ' 001b or 010b or 000b = 011b = 3 FloatNumberInterval = FloatIntervals Or LeftIsNumber Or RightIsInterval ' 001b or 000b or 100b = 101b = 5 FloatNumberNumber = FloatIntervals Or LeftIsNumber Or RightIsNumber 'error state ' 001b or 000b or 000b = 001b = 1 Type LongInterval Dim LeftLong As Long Dim RightLong As Long End Type Dim FloatInterval Dim LeftFloat As Double Dim RightFloat As Double End Type Dim Result As Long Dim li1 As LongInterval Dim li2 As LongInterval Dim l1 As Long Dim l2 As Long Result = Distance(LongIntervalInterval, VarPtr(li1), VarPtr(li2)) Result = Distance(LongIntervalNumber, VarPtr(li1), VarPtr(i1)) 'Result points to Long or LongInterval or Double or DoubleInterval