. 'ffi_type_uchar' The C 'unsigned char' type. 'ffi_type_schar' The C 'signed char' type. (Note that there is not an exact equivalent to the C 'char' type in 'libffi'; ordinarily you should either use 'ffi_type_schar' or 'ffi_type_uchar' depending on whether 'char' is signed.) 'ffi_type_ushort' The C 'unsigned short' type. 'ffi_type_sshort' The C 'short' type. 'ffi_type_uint' The C 'unsigned int' type. 'ffi_type_sint' The C 'int' type. 'ffi_type_ulong' The C 'unsigned long' type. 'ffi_type_slong' The C 'long' type. 'ffi_type_longdouble' On platforms that have a C 'long double' type, this is defined. On other platforms, it is not. 'ffi_type_pointer' A generic 'void *' pointer. You should use this for all pointers, regardless of their real type. 'ffi_type_complex_float' The C '_Complex float' type. 'ffi_type_complex_double' The C '_Complex double' type. 'ffi_type_complex_longdouble' The C '_Complex long double' type. On platforms that have a C 'long double' type, this is defined. On other platforms, it is not. Each of these is of type 'ffi_type', so you must take the address when passing to 'ffi_prep_cif'.