Hello Thomas, Below you provide the example function 'inc_int' and ask what you should pass to it. You should pass it a pointer to an int of course. :-) And where do you get such an object? You can make one with another c-lambda based function. For example: (define make-int-box (c-lambda () int* "___result = malloc(sizeof( int ));")) So now you can do: (define i (make-int-box)) (inc_int i) There is a problem... the int box doesn't contain anything to increment. So we should have a way to set the value inside the box. We also need a way to access the contents of the box. These functions do these: (define set-int-box (c-lambda (int* int) void "*___arg1 = ___arg2;")) (define val-int-box (c-lambda (int*) int "___result = *___arg1;")) That should get you started. The atomic code I announced a few days ago contains a macro called 'c-box' that works like this: (c-box int) Now you can do this: ;; Make a new int box (define i (new-int-box)) ;; Set the value of the box: [i val: 0] ;; Call your inc_int to increment the value in the box (inc_int [i box:]) ;; Print the new value: [i val:] Happy Hacking Ed Cavazos On 31 Dec 2004 17:39:20 +0100, Thomas Hafner <thomas@hafner.nl.eu.org> wrote:
Some given C functions receive pointers and manipulate the memory where the pointers are pointing to. How should my c-lamda expression look like to mach that requirement?
Here's a simple example (not real, but to show my problem). If the given C Funktion looks like that: void inc_int(int *pI) { (*pI)++; }
Is it then Ok to use it from Gambit 4.0 beta 11 like follows? (define inc-int (c-lambda ((pointer int)) void "inc_int"))
If yes: what can I pass to inc-int? How to express the Scheme equivalent to the C pointer?
Otherwise: how should my Scheme procedure definition look like? Of course the example above is a very simple one. A good solution should also work with more complicated C functions, e.g. of type int () (int *, char **).
Regards Thomas Hafner
_______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
Afficher les réponses par date
participants (1)
-
Eduardo Cavazos