[gambit-list] Getting char*, uchar*, short*, unsigned short*, ...

lowly coder lowlycoder at huoyanjinjing.com
Fri Apr 17 00:34:11 EDT 2009


I'm really glad you mentioned this .... I got to this point:


(include
"gl-header.scm")



(c-declare
#<<c-declare-end

#include
<GL/gl.h>

c-declare-end

)





(define
u32-vector->uint*

  (c-lambda (scheme-object) GLuint* "___result =
___CAST(GLuint*,&___FETCH_U32(___BODY(_\
__arg1),___INT(0)));"))


... and yeah, now I'm going to scratch it. Wasn't aware the gc moved stuff
around. Thanks! I can only imagine how fun this bug would have been to
debug.

On Thu, Apr 16, 2009 at 9:30 PM, Marc Feeley <feeley at iro.umontreal.ca>wrote:

>
> On 17-Apr-09, at 12:19 AM, lowly coder wrote:
>
>  Hi!
>>
>>  This is a different question from my previous silly question.
>>
>>  All though it's really cool that I can take a C function with signature:
>> void foo(int *);
>>  and in scheme land create a (scheme-foo) so that I can do:
>>
>>  (define bar (make-u....vector ...))
>>  (scheme-foo bar)
>>
>>  There are a lot of C functions I need to use that take arguments int*,
>> short*, ...
>>
>>  I would prefer to not change all these C bindings, and somehow magically
>> have a Scheme function that given:
>>  (uber-magic bar)
>>  returns me a int* corresponding to where the data is stored in u32-vector
>> bar.
>>
>
> That would be problematic because objects in the Scheme heap, including
> vectors, can be moved by the garbage collector.  So a C pointer to an
> element of a u32vector could become stale (dangling pointer) at any moment.
>  The only way this could work is to allocate a "still" vector.  But all of
> this is seriously asking for trouble (the pointer will be a dangling pointer
> when the still object is reclaimed).
>
> Marc
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20090416/b19cdf00/attachment.htm>


More information about the Gambit-list mailing list