For more involved C types than simple aliases to built-in types, such
as you can make with defctype, CFFI allows declaration of
structures and unions with defcstruct and defcunion.
For example, consider this fictional C structure declaration holding some personal information:
struct person {
int number;
char* reason;
};
The equivalent defcstruct form follows:
(defcstruct person
(number :int)
(reason :string))
Please note that this interface is only for those that must know about
the values contained in a relevant struct. If the library you are
interfacing returns an opaque pointer that needs only be passed to
other C library functions, by all means just use :pointer or a
type-safe definition munged together with defctype and type
translation.
defcstruct for more details.