Struct libffi::middle::Cif [] [src]

pub struct Cif { /* fields omitted */ }

Describes the calling convention and types for calling a function.

This is the middle layer’s wrapping of the low and raw layers’ ffi_cif. An initialized CIF contains references to an array of argument types and a result type, each of which may be allocated on the heap. Cif manages the memory of those referenced objects.

Construct with Cif::new or Cif::from_type_array.

Examples

extern "C" fn add(x: f64, y: &f64) -> f64 {
    return x + y;
}

use libffi::middle::*;

let args = vec![Type::f64(), Type::pointer()];
let cif = Cif::new(args.into_iter(), Type::f64());

let n = unsafe { cif.call(CodePtr(add as *mut _), &[arg(&5), arg(&&6)]) };
assert_eq!(11, n);

Methods

impl Cif
[src]

Creates a new CIF for the given argument and result types.

Takes ownership of the argument and result Types, because the resulting Cif retains references to them. Defaults to the platform’s default calling convention; this can be adjusted using set_abi.

Calls a function with the given arguments.

In particular, this method invokes function fun passing it arguments args, and returns the result.

Safety

There is no checking that the calling convention and types in the Cif match the actual calling convention and types of fun, nor that they match the types of args.

Sets the CIF to use the given calling convention.

Gets a raw pointer to the underlying ffi_cif.

This can be used for passing a middle::Cif to functions from the low and raw modules.

Trait Implementations

impl Debug for Cif
[src]

Formats the value using the given formatter.

impl Clone for Cif
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more