Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > dl/importライブラリ > DL::Functionクラス > call
call(*arg) -> DL::CPtr | Integer | Float | nil
call(*arg) {|*v| ... } -> DL::CPtr | Integer | Float | nil
自身が表す関数を呼び、返り値を Ruby のオブジェクトに変換して返します。
自身の返り値の型がポインタである場合、返り値を DL::CPtr オブジェクトにして返します。 返り値の型が double か float である場合は、返り値を Ruby の Float オブジェクトに変換して返します。 返り値の型が void の場合は nil を返します。それ以外の場合は整数として返します。
ブロックを与えた場合、引数の中にバインドされていない DL::Function オブジェクトが もしあれば与えられたブロックをバインドし、その後上と同じように関数を呼びます。
例:
require 'dl/import' h = DL::Handle.new addr = h.sym('fread') cfunc = DL::CFunc.new(addr, DL::TYPE_INT) func = DL::Function.new(cfunc, [DL::TYPE_VOIDP, DL::TYPE_LONG, DL::TYPE_LONG, DL::TYPE_VOIDP]) io = File.open('s.txt') s = " " * 8 func.call(s, 4, 1, io) p s #=> "hoge "
例:
require 'dl/import' h = DL::Handle.new addr = h.sym('strdup') cfunc = DL::CFunc.new(addr, DL::TYPE_VOIDP) func = DL::Function.new(cfunc, [DL::TYPE_VOIDP]) s = 'abc' ptr = func.call(s) p ptr.to_s #=> "abc"