(use-modules (system foreign)) (define lib (dynamic-link (string-append (getcwd) "/mysalsa"))) (define give (pointer->procedure void (dynamic-func "give" lib) '(* *))) (define call (pointer->procedure void (dynamic-func "call" lib) '())) (define (simple-closure capture) (let ([proc (lambda (arg) (display (string-append "Captured: " capture)) (newline) (display (string-append "Argument: " (pointer->string arg))) (newline))] [arg (string-reverse capture)]) (give (procedure->pointer void proc '(*)) (string->pointer arg)))) (simple-closure "Closure without collection") (call) (gc) (simple-closure "Closure with garbate collected") (gc) (call)