Arguments: name arglist &rest body
This macro creates a function that can be called from non-lisp code. It is intended that such a function be callable from lisp as well, but such functionality has not yet been provided. (This macro replaces the obsolete defun-c-callable.)
name must be a symbol representing the name of the new function to install.
arglist is an argument list
specification. Each argument is either a symbol representing the name
of an argument of type :long
, or it is a list of two
elements containing the argument name and foreign-type,
respectively.
The first form in the body can be a
declaration form, whose valid options are
:convention
and :unwind
.
In order to use a function defined by defun-foreign-callable, the function must first be registered using register-foreign-callable.
What the foreign-callable function return as a foreign value is controlled by the call
to register-foreign-callable (which actually
enables the foreign callable function). If the third (optional) argument to register-foreign-callable is nil
, an
unconverted Lisp value is returned in the foreign return register. Programmers must use
the specifications in [Allegro directory]/misc/lisp.h to interpret this
value. If the third argument is t
, then the Lisp value of the function is
converted to a foreign value according to the default conversion rules, and the resulting
value is returned as the foreign value returned by the Lisp function.
The body of the foreign callable Lisp function must be carefully coded to return a Lisp value that will trigger an appropriate conversion so that the desired foreign value will actually appear at the interface.
See ftype.htm for information on foreign types in Allegro CL and foreign-functions.htm for general information on foreign functions in Allegro CL.
The documentation is described in introduction.htm and the index is in index.htm.
Copyright (c) 1998-2000, Franz Inc. Berkeley, CA., USA. All rights reserved.
Created 2000.10.5.