chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] pointer-pointer-ref


From: Jim Ursetto
Subject: Re: [Chicken-users] pointer-pointer-ref
Date: Fri, 13 Mar 2009 02:19:40 -0500

On Thu, Mar 12, 2009 at 8:25 PM, Eduardo Cavazos <address@hidden> wrote:
>> extern Status XQueryTree(
>>    Window**        /* children_return */,
>> );
>> (c-function Status XQueryTree (... (c-pointer (c-pointer unsigned-long)) ...)

>> I can allocate enough storage for a pointer via:
>>    (define children-return (allocate sizeof:c-pointer))
>> The trouble is, how do I portably extract the address?

(let-location ((children-return (c-pointer unsigned-long)))
  (XQueryTree ... (location children-return) ...)
  (pointer-u32-ref children-return))  ; obtain window

Test example below.  But consider, on a 64-bit machine, will an
unsigned long (Window) still be 32 bits?

#>
unsigned long buf[] = { 0xdeadbeefL };
void foo(unsigned long **ret) { *ret = buf; }
<#

(define foo (foreign-lambda void "foo"
                            (c-pointer (c-pointer unsigned-long))))

(let-location ((ptr (c-pointer unsigned-long)))
   (foo (location ptr))
   (printf "0x~x\n" (pointer-u32-ref ptr)))  ; 0xdeadbeef




reply via email to

[Prev in Thread] Current Thread [Next in Thread]