Libffi provides a number of built-in type descriptors that can
be used to describe argument and return types:
ffi_type_void ¶The type void. This cannot be used for argument types, only
for return values.
ffi_type_uint8 ¶An unsigned, 8-bit integer type.
ffi_type_sint8 ¶A signed, 8-bit integer type.
ffi_type_uint16 ¶An unsigned, 16-bit integer type.
ffi_type_sint16 ¶A signed, 16-bit integer type.
ffi_type_uint32 ¶An unsigned, 32-bit integer type.
ffi_type_sint32 ¶A signed, 32-bit integer type.
ffi_type_uint64 ¶An unsigned, 64-bit integer type.
ffi_type_sint64 ¶A signed, 64-bit integer type.
ffi_type_float ¶The C float type.
ffi_type_double ¶The C double type.
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.