[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