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]
pub fn new<I>(args: I, result: Type) -> Self where
I: IntoIterator<Item = Type>,
I::IntoIter: ExactSizeIterator<Item = Type>,
[src]
I: IntoIterator<Item = Type>,
I::IntoIter: ExactSizeIterator<Item = Type>,
Creates a new CIF for the given argument and result types.
Takes ownership of the argument and result
Type
s, because the resulting
Cif
retains references to them.
Defaults to the platform’s default calling convention; this
can be adjusted using set_abi
.
pub unsafe fn call<R>(&self, fun: CodePtr, args: &[Arg]) -> R
[src]
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
.
pub fn set_abi(&mut self, abi: FfiAbi)
[src]
Sets the CIF to use the given calling convention.
pub fn as_raw_ptr(&self) -> *mut ffi_cif
[src]
Trait Implementations
impl Debug for Cif
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more