Hi, I'm using my ffi cairo bindings, that worked fine in the past. However now that I'm using Gambit compiled with C++ support it stopped working. I got this error: *** ERROR IN main-sdl#main, "main-sdl.scm"@19.24 -- (Argument 2) Can't convert to C type (cairo#cairo-image-surface-create-for-data '#<|unsigned char*| #16 0x7f33ba191000> 1 500 500 2000) On the ffi side, things are declared like this: (c-define-type cairo-format-t "cairo_format_t") (define CAIRO_FORMAT_ARGB32 0) (define CAIRO_FORMAT_RGB24 1) (define CAIRO_FORMAT_A8 2) (define CAIRO_FORMAT_A1 3) (define CAIRO_FORMAT_RGB16_565 4) (define cairo-image-surface-create-for-data (c-lambda (unsigned-char* cairo-format-t int int int) cairo-surface-t* "cairo_image_surface_create_for_data")) And used like this: (cairo-image-surface-create-for-data (SDL::surface-pixels sdl-surface) CAIRO_FORMAT_RGB24 maxx maxy (SDL::screen-pitch sdl-surface)) I've tried with this idea: (define cairo-format (c-lambda (int) cairo-format-t " switch (___arg1) { case 0: ___result = CAIRO_FORMAT_ARGB32; break; case 1: ___result = CAIRO_FORMAT_RGB24; break; // and so on... } ")) And then calling on the Scheme side "(cairo-format CAIRO_FORMAT_RGB24)" instead of just using the int directly, but it segfaults. How should I really handle enums properly? Best regards,