class Fiddle::Closure
Description¶ ↑
An FFI closure wrapper, for handling callbacks.
Example¶ ↑
closure = Class.new(Fiddle::Closure) { def call 10 end }.new(Fiddle::TYPE_INT, []) #=> #<#<Class:0x0000000150d308>:0x0000000150d240> func = Fiddle::Function.new(closure, [], Fiddle::TYPE_INT) #=> #<Fiddle::Function:0x00000001516e58> func.call #=> 10
Attributes
args[R]
arguments of the FFI closure
ctype[R]
the C type of the return of the FFI closure
Public Class Methods
new(ret, args, abi = Fiddle::DEFAULT)
click to toggle source
Construct a new Closure
object.
-
ret
is the C type to be returned -
args
is anArray
of arguments, passed to the callback function -
abi
is the abi of the closure
If there is an error in preparing the ffi_cif or ffi_prep_closure, then a RuntimeError
will be raised.
static VALUE initialize(int argc, VALUE *argv, VALUE self) { initialize_data data; data.self = self; data.argc = argc; data.argv = argv; return rb_rescue(initialize_body, (VALUE)&data, initialize_rescue, (VALUE)&data); }
Public Instance Methods
to_i()
click to toggle source
Returns the memory address for this closure
static VALUE to_i(VALUE self) { fiddle_closure * cl; void *code; TypedData_Get_Struct(self, fiddle_closure, &closure_data_type, cl); code = cl->code; return PTR2NUM(code); }