Skip to main content
The raw bridge provides direct access to the NAPI functions exported from liblibrary.so.

Import

import ffi from 'liblibrary.so';

API Reference

load()

function load(libName: string): bigint;
Calls dlopen() on the given library. Returns a bigint handle.
const handle = ffi.load('libffi_target.so');

close()

function close(handle: bigint): void;
Calls dlclose() on the library handle.

defineFunction()

function defineFunction(handle: bigint, funcName: string, argTypes: string, returnType: string): void;
Resolves a function via dlsym() and registers its type signature.
ffi.defineFunction(handle, 'add', 'dd', 'd');

callBySig()

function callBySig(handle: bigint, funcName: string, numArgs: number[], strArgs: string[]): number;
Calls a previously registered function.
ffi.callBySig(handle, 'add', [2.0, 3.0], []);

callMixed()

function callMixed(handle: bigint, funcName: string, argTypes: string, returnType: string, numArgs: number[], strArgs: string[]): number;
One-shot call — dlsym() + type dispatch in a single call.
ffi.callMixed(handle, 'compute', 'ids', 'd', [0, 4.0], ['square']);

callString()

function callString(handle: bigint, funcName: string): string;
Calls a C function returning const char*.
ffi.callString(handle, 'getVersion'); // → "1.0.0"

readCString()

function readCString(ptr: number): string;
Reads a null-terminated C string from a raw pointer.

callPtr()

function callPtr(ptr: number, argTypes: string, returnType: string, numArgs: number[], strArgs: string[]): number;
Calls a function by its raw pointer, skipping dlsym().

getSymbolPtr()

function getSymbolPtr(handle: bigint, funcName: string): number;
Returns the raw function pointer for a symbol.

createCallback()

function createCallback(callback: Function, argTypes: string, returnType: string, threadsafe?: boolean): number;
Stores a TS function in the callback registry. Returns a slot handle.

destroyCallback()

function destroyCallback(handle: number): void;
Removes a callback from the registry.

invokeCallback()

function invokeCallback(handle: number, ...args: any[]): any;
Invokes a stored callback by its handle.

getCallbackThreadsafe()

function getCallbackThreadsafe(handle: number): boolean;
Returns whether the callback is thread-safe.

getCallbackPtr()

function getCallbackPtr(handle: number): number;
Returns the callback function pointer.
  • Non-threadsafe: returns the slot handle
  • Threadsafe: returns a real executable trampoline address

callCallbackThreadSafe()

function callCallbackThreadSafe(handle: number, arg: number): void;
Calls a callback through the TSFN path for verification purposes.

ptr()

function ptr(buffer: ArrayBuffer | TypedArray): number;
Gets the underlying memory pointer of an ArrayBuffer or TypedArray.
const buf = new ArrayBuffer(256);
const p = ffi.ptr(buf); // → memory address