module Foreign:sig
..end
val foreign : ?abi:Libffi_abi.abi ->
?from:Dl.library ->
?stub:bool ->
?check_errno:bool ->
?release_runtime_lock:bool -> string -> ('a -> 'b) Ctypes.fn -> 'a -> 'b
foreign name typ
exposes the C function of type typ
named by name
as
an OCaml value.
The argument ?from
, if supplied, is a library handle returned by
Dl.dlopen
.
The argument ?stub
, if true
(defaults to false
), indicates that the
function should not raise an exception if name
is not found but return
an OCaml value that raises an exception when called.
The value ?check_errno
, which defaults to false
, indicates whether
Unix.Unix_error
should be raised if the C function modifies errno
.
Please note that a function that succeeds is allowed to change errno. So
use this option with caution.
The value ?release_runtime_lock
, which defaults to false
, indicates
whether the OCaml runtime lock should be released during the call to the C
function, allowing other threads to run. If the runtime lock is released
then the C function must not access OCaml heap objects, such as arguments
passed using Ctypes.ocaml_string
and Ctypes.ocaml_bytes
, and must not
call back into OCaml.
Raises Dl.DL_error
if name
is not found in ?from
and ?stub
is
false
.
val foreign_value : ?from:Dl.library -> string -> 'a Ctypes.typ -> 'a Ctypes.ptr
foreign_value name typ
exposes the C value of type typ
named by name
as an OCaml value. The argument ?from
, if supplied, is a library handle
returned by Dl.dlopen
.val funptr : ?abi:Libffi_abi.abi ->
?name:string ->
?check_errno:bool ->
?runtime_lock:bool ->
?thread_registration:bool -> ('a -> 'b) Ctypes.fn -> ('a -> 'b) Ctypes.typ
The ctypes library, like C itself, distinguishes functions and function pointers. Functions are not first class: it is not possible to use them as arguments or return values of calls, or store them in addressable memory. Function pointers are first class, and so have none of these restrictions.
The value ?check_errno
, which defaults to false
, indicates whether
Unix.Unix_error
should be raised if the C function modifies errno
.
The value ?runtime_lock
, which defaults to false
, indicates whether
the OCaml runtime lock should be released during the call to the C
function, allowing other threads to run. If the runtime lock is released
then the C function must not access OCaml heap objects, such as arguments
passed using Ctypes.ocaml_string
and Ctypes.ocaml_bytes
, and must
not call back into OCaml. If the function pointer is used to call into
OCaml from C then the ?runtime_lock
argument indicates whether the lock
should be acquired and held during the call.
Raises Dl.DL_error
if name
is not found in ?from
and ?stub
is
false
.
val funptr_opt : ?abi:Libffi_abi.abi ->
?name:string ->
?check_errno:bool ->
?runtime_lock:bool ->
?thread_registration:bool ->
('a -> 'b) Ctypes.fn -> ('a -> 'b) option Ctypes.typ
This behaves like Foreign.funptr
, except that null pointers appear in OCaml as
None
.
exception CallToExpiredClosure