method
bind
v1_9_3_125 -
Show latest stable
-
0 notes -
Class: Function
- 1_8_6_287
- 1_8_7_72
- 1_8_7_330
- 1_9_1_378
- 1_9_2_180
- 1_9_3_125 (0)
- 1_9_3_392 (0)
- 2_1_10 (0)
- 2_2_9
- 2_4_6
- 2_5_5
- 2_6_3
- What's this?
bind(&block)
public
Hide source
# File ext/dl/lib/dl/func.rb, line 77 def bind(&block) if DL.fiddle? @cfunc = Class.new(Fiddle::Closure) { def initialize ctype, args, block super(ctype, args) @block = block end def call *args @block.call(*args) end }.new(@cfunc.ctype, @args, block) else if( !block ) raise(RuntimeError, "block must be given.") end if( @cfunc.ptr == 0 ) cb = Proc.new{|*args| ary = @stack.unpack(args) @stack.types.each_with_index{|ty, idx| case ty when TYPE_VOIDP ary[idx] = CPtr.new(ary[idx]) end } r = block.call(*ary) wrap_arg(r, @cfunc.ctype, []) } case @cfunc.calltype when :cdecl @cfunc.ptr = set_cdecl_callback(@cfunc.ctype, @stack.size, &cb) when :stdcall @cfunc.ptr = set_stdcall_callback(@cfunc.ctype, @stack.size, &cb) else raise(RuntimeError, "unsupported calltype: #{@cfunc.calltype}") end if( @cfunc.ptr == 0 ) raise(RuntimeException, "can't bind C function.") end end end end