There are three different ways to call C functions from Scheme, depending on how the C function was obtained.
(call-imported-binding binding arg0 ...) -> value
(call-external external arg0 ...) -> value
(call-external-value value name arg0 ...) -> value
call-imported-binding
the function argument must be an
imported binding.
For call-external
the function argument must be an external
bound in the current process
(see
the section on Dynamic Loading).
For call-external-value
value
must be a byte vector
whose contents is a pointer to a C function and name
should be
a string naming the function.
The name
argument is used only for printing error messages.
For all of these, the C function is passed the argi
values
and the value returned is that returned by C procedure.
No automatic representation conversion occurs for either arguments or
return values.
Up to twelve arguments may be passed.
There is no method supplied for returning multiple values to
Scheme from C (or vice versa) (mainly because C does not have multiple return
values).
Keyboard interrupts that occur during a call to a C function are ignored until the function returns to Scheme (this is clearly a problem; we are working on a solution).
(import-lambda-definition | syntax |
(import-lambda-definition | syntax |
name
to be a function with the given formals that
applies those formals to the corresponding C binding.
C-name
, if supplied, should be a string.
These expand into
(define temp (lookup-imported-bindingc-name
)) (definename
(lambda (formal
...) (call-imported-binding tempformal
...)))
If c-name
is not supplied, it is derived from name
by converting
all letters to lowercase and replacing `-
' with `_
'.
Previous: Calling C functions from Scheme | Next: Calling C functions from Scheme