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...) (external-apply 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