APIdock / Ruby
/
method

bind

ruby latest stable - Class: DL ::Function

Method deprecated or moved

This method is deprecated or moved on the latest stable version. The last existing version (v2_1_10) is shown here.

bind(&block)
public

No documentation available.

# File ext/dl/lib/dl/func.rb, line 117
 def bind(&block)
 if DL.fiddle?
 @cfunc = Class.new(FiddleClosureCFunc) {
 def initialize ctype, args, abi, name, block
 super(ctype, args, abi, name)
 @block = block
 end
 def call *args
 @block.call(*args)
 end
 }.new(@cfunc.ctype, @args, abi, name, block)
 @ptr = @cfunc
 return nil
 else
 if( !block )
 raise(RuntimeError, "block must be given.")
 end
 unless block.lambda?
 block = Class.new(self.class){define_method(:call, block); def initialize(obj); obj.instance_variables.each{|s| instance_variable_set(s, obj.instance_variable_get(s))}; end}.new(self).method(:call)
 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

AltStyle によって変換されたページ (->オリジナル) /