Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.90 KB | None | 0 0
  1. (c-declare #<<c-declare-end
  2.  
  3. #include <stdio.h>
  4.  
  5. int get_value(int* value)
  6. {
  7.     if(NULL != value) {
  8.         *value = 42;
  9.     } else {
  10.         printf("Invalid pointer");
  11.     }
  12.  
  13.     return 21;
  14. }
  15.  
  16. c-declare-end
  17. )
  18.  
  19. (c-define-type int* (pointer int))
  20.  
  21. (define get-value (c-lambda (int*) int "get_value"))
  22.  
  23. ;; Define a Wrapper in C
  24. (define %get-value (c-lambda () int
  25. #<<C-END
  26.    int tmp;
  27.    int retval = get_value(&tmp);
  28.  
  29.    /* TODO: Handle retval inside the C Wrapper code */
  30.  
  31.    ___result = tmp;
  32. C-END
  33. ))
  34.    
  35. ;; Can we change a pointer via a c function call arg?
  36. (define value #f)
  37. (let ((retval (get-value value)))
  38.   (if (eq? retval 21)
  39.       (begin
  40.     (display value) ; Prints #f
  41.     (newline))
  42.       (begin
  43.     (display "Did not get 21 as return value")
  44.     (newline))))
  45.  
  46. ; Now use the wrapper API instead
  47. (set! value (%get-value))
  48. (display value) ; No surprise, prints 42
  49. (newline)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement