Janet 1.25.1-894cd0e Documentation
(Other Versions: 1.24.0 1.23.0 1.22.0 1.21.0 1.20.0 1.19.0 1.18.1 1.17.1 1.16.1 1.15.0 1.13.1 1.12.2 1.11.1 1.10.1 1.9.1 1.8.1 1.7.0 1.6.0 1.5.1 1.5.0 1.4.0 1.3.1 )

FFI Module

Janet's Foreign Function Interface module is used to interface with native code in a way that does not compiling native "glue" code. The tradeoff is the FFI module is "unsafe" - there is on guarantee or even much protection from crashing your program or triggering nonsensical behavior. This departs from Janet's usual memory safe programming model.

Index

ffi/align ffi/call ffi/close ffi/context ffi/defbind ffi/lookup ffi/native ffi/read ffi/signature ffi/size ffi/struct ffi/trampoline ffi/write


ffi/align cfunction source
(ffi/align type)

Get the align of an ffi type in bytes.
Community Examples

ffi/call cfunction source
(ffi/call pointer signature & args)

Call a raw pointer as a function pointer. The function signature specifies how Janet values in `args` are converted to native machine types.
Community Examples

ffi/close cfunction source
(ffi/close native)

Free a native object. Dereferencing pointers to symbols in the object will have undefined behavior after freeing.
Community Examples

ffi/context function source
(ffi/context &opt native-path &named map-symbols lazy)

Set the path of the dynamic library to implictly bind, as well as other global state for ease of creating native bindings.
Community Examples

ffi/defbind macro source
(ffi/defbind name ret-type & body)

Generate bindings for native functions in a convenient manner.
Community Examples

ffi/lookup cfunction source
(ffi/lookup native symbol-name)

Lookup a symbol from a native object. All symbol lookups will return a raw pointer if the symbol is found, else nil.
Community Examples

ffi/native cfunction source
(ffi/native &opt path)

Load a shared object or dll from the given path, and do not extract or run any code from it. This is different than `native`, which will run initialization code to get a module table. If `path` is nil, opens the current running binary. Returns a `core/native`.
Community Examples

ffi/read cfunction source
(ffi/read ffi-type bytes &opt offset)

Parse a native struct out of a buffer and convert it to normal Janet data structures. This function is the inverse of `ffi/write`. `bytes` can also be a raw pointer, although this is unsafe.
Community Examples

ffi/signature cfunction source
(ffi/signature calling-convention ret-type & arg-types)

Create a function signature object that can be used to make calls with raw function pointers.
Community Examples

ffi/size cfunction source
(ffi/size type)

Get the size of an ffi type in bytes.
Community Examples

ffi/struct cfunction source
(ffi/struct & types)

Create a struct type definition that can be used to pass structs into native functions. 
Community Examples

ffi/trampoline cfunction source
(ffi/trampoline cc)

Get a native function pointer that can be used as a callback and passed to C libraries. This callback trampoline has the signature `void trampoline(void \*ctx, void \*userdata)` in the given calling convention. This is the only function signature supported. It is up to the programmer to ensure that the `userdata` argument contains a janet function the will be called with one argument, `ctx` which is an opaque pointer. This pointer can be further inspected with `ffi/read`.
Community Examples

ffi/write cfunction source
(ffi/write ffi-type data &opt buffer)

Append a native tyep to a buffer such as it would appear in memory. This can be used to pass pointers to structs in the ffi, or send C/C++/native structs over the network or to files. Returns a modifed buffer or a new buffer if one is not supplied.
Community Examples