Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (c-declare #<<c-declare-end
- #include <stdio.h>
- int get_value(int* value)
- {
- if(NULL != value) {
- *value = 42;
- } else {
- printf("Invalid pointer");
- }
- return 21;
- }
- c-declare-end
- )
- (c-define-type int* (pointer int))
- (define get-value (c-lambda (int*) int "get_value"))
- ;; Define a Wrapper in C
- (define %get-value (c-lambda () int
- #<<C-END
- int tmp;
- int retval = get_value(&tmp);
- /* TODO: Handle retval inside the C Wrapper code */
- ___result = tmp;
- C-END
- ))
- ;; Can we change a pointer via a c function call arg?
- (define value #f)
- (let ((retval (get-value value)))
- (if (eq? retval 21)
- (begin
- (display value) ; Prints #f
- (newline))
- (begin
- (display "Did not get 21 as return value")
- (newline))))
- ; Now use the wrapper API instead
- (set! value (%get-value))
- (display value) ; No surprise, prints 42
- (newline)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement