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