Sorry I typed that code offhand and it had some mistakes; should be:
(use-modules (srfi srfi-9) (system foreign)) (define-syntax define-ffi-wrapper (syntax-rules () ((_ size name wrap unwrap predicate to-pointer from-pointer) (begin (define-record-type name (wrap bv pointer) predicate (bv unwrap) (pointer pointer-ref pointer-set!)) (define (to-pointer x) (or (pointer-ref x) (let ((pointer (bytevector->pointer x))) (pointer-set! x pointer) pointer))) (define (from-pointer pointer) (wrap (pointer->bytevector pointer size) pointer))))))