[gambit-list] FFI C out parameters https://mailman.iro.umontreal.ca/pipermail/gambit-list/2015-January/007696.h... According to the mailing list entry above: multiple "int" values: ---------- (c-declare " void add_mul(int x, int y, ___SCMOBJ res) { int add = x+y; int mul = x*y; ___VECTORSET(res, ___FIX(0), ___FIX(add)) ___VECTORSET(res, ___FIX(1), ___FIX(mul)) } ") (define (add-mul x y) (let ((res (vector 0 0))) ((c-lambda (int int scheme-object) void "add_mul") x y res) (values (vector-ref res 0) (vector-ref res 1)))) (receive (add mul) (add-mul 3 7) (pp (list 'add= add 'mul= mul))) ;; prints: (add= 10 mul= 21) ---------- In an example code, C function is returning multiple "int" values. How to write an example code returning multiple "double" values from a C function ? multiple "double" values: ---------- (c-declare " void add_mul(double x, double y, ___SCMOBJ res) { double add = x+y; double mul = x*y; ___F64VECTORSET(res, ___FIX(0), ___???(add)) ___F64VECTORSET(res, ___FIX(1), ___???(mul)) } ") (define (add-mul x y) (let ((res (vector 0 0))) ((c-lambda (double double scheme-object) void "add_mul") x y res) (values (vector-ref res 0) (vector-ref res 1)))) (receive (add mul) (add-mul 3.5 7.0) (pp (list 'add= add 'mul= mul))) ;; prints: (add= 10.5 mul= 24.5) ---------- ___F64VECTORSET(res, ___FIX(0), ___???(add)) ↑ ↑ ?? ?? 1) Is it possible to use ___F64VECTORSET macro instead of ___VECTORSET macro ? 2) Is it possible to define a ___F64(x) macro like a macro ___FIX(x) ? Thank you very much in advance.