Skip to main content
C functions often accept parameters of different types. arkffi handles this by separating numeric and string arguments into two arrays.

Signature Encoding

CodeC Type
iint32_t, int, bool, char
lint64_t, uint64_t, void*
ddouble, float
sconst char*
For a function like:
double compute(int mode, double value, const char* name);
The type string is "ids" and the return type is "d".

Using callMixed

const h = ffi.load('libffi_target.so');

const result = ffi.callMixed(
  h, 'compute',
  'ids',       // arg types: int32, double, CString
  'd',         // return type: double
  [0, 4.0],    // numeric args
  ['square'],  // string args
);

ffi.close(h);

Using dlopen

const lib = dlopen('libffi_target.so', {
  compute: {
    args: [FFIType.int32, FFIType.double, FFIType.CString],
    returns: FFIType.double,
  },
});

lib.symbols.compute(0, 4.0, 'square');

Supported Signatures

SignatureC Function
iddouble fn(int32_t, double)
didouble fn(double, int32_t)
idsdouble fn(int32_t, double, const char*)
siddouble fn(const char*, int32_t, double)
isddouble fn(int32_t, const char*, double)
iiddouble fn(int32_t, int32_t, double)
ididouble fn(int32_t, double, int32_t)
ididdouble fn(int32_t, double, int32_t, double)
ssint32_t fn(const char*, const char*)
sdouble fn(const char*)