Package: cffi

Macro foreign-funcall

Lambda List

foreign-funcall (name-and-options &rest args)

Syntax

arguments ::= { arg-type arg }* [return-type]
name-and-options ::= name | (name &key library convention)

Arguments

name -- A Lisp string.
arg-type -- A foreign type.
arg -- An argument of type arg-type.
return-type -- A foreign type, :void by default.
library -- A lisp symbol; not evaluated.
convention -- One of :cdecl (default) or :stdcall.

Return Value

A lisp object.

Details

The foreign-funcall macro is the main primitive for calling foreign functions.

Note: The return value of foreign-funcall on functions with a :void return type is still undefined.

Implementation-specific Notes

Corman Lisp does not support foreign-funcall. On implementations that do not support foreign-funcall the symbol cffi-sys::no-foreign-funcall will be present in *features*. Note: in these Lisps you can still use the defcfun interface.

Examples

  CFFI> (foreign-funcall "strlen" :string "foo" :int)
  => 3  
Given the C code:
  void print_number(int n)
  {
      printf("N: %dn", n);
  }

CFFI> (foreign-funcall "print_number" :int 123456) -| N: 123456 => NIL
Or, equivalently:
  CFFI> (foreign-funcall "print_number" :int 123456 :void)
  -| N: 123456
  => NIL

CFFI> (foreign-funcall "printf" :string (format nil "%s: %d.~%") :string "So long and thanks for all the fish" :int 42 :int) -| So long and thanks for all the fish: 42. => 41
 

See also