Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > fiddleライブラリ > Fiddle::Functionクラス

class Fiddle::Function

クラスの継承リスト: Fiddle::Function < Object < Kernel < BasicObject

要約

C の関数を表すクラスです。

目次

特異メソッド
new
インスタンスメソッド
abi call
定数
DEFAULT STDCALL

特異メソッド

new(ptr, args, ret_type, abi=Fiddle::Function::DEFAULT) -> Fiddle::Function[permalink][rdoc]

ptr (関数ポインタを表す整数)から Fiddle::Function オブジェクトを 生成します。

ptr には DL::Handle から DL::Handle#ptr で取りだした 関数ポインタ(を表す整数)を渡します。

args、ret_type で関数の引数と返り値の型を指定します。これには以下の 定数が利用できます。「-TYPE_INT」 のように符号を反転させると unsigned を 意味します。

abi で呼出規約を指定します。

のどちらかを指定します。

require 'dl'
require 'fiddle'

include Fiddle

libc = DL.dlopen("/lib/libc.so.6")
f = Fiddle::Function.new(libc["strcpy"], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP)
[PARAM] ptr:
C の関数を指す DL::Handle オブジェクト
[PARAM] args:
引数の型を表す配列
[PARAM] ret_type:
返り値の型
[PARAM] abi:
呼出規約

インスタンスメソッド

abi -> Integer[permalink][rdoc]

呼出規約を返します。

[SEE_ALSO] Fiddle::Function.new

call(*args) -> Integer|DL::CPtr|nil[permalink][rdoc]

関数を呼び出します。

Fiddle::Function.new で指定した引数と返り値の型に基いて Ruby のオブジェクトを適切に C のデータに変換して C の関数を呼び出し、 その返り値を Ruby のオブジェクトに変換して返します。

引数の変換は以下の通りです。

void* (つまり任意のポインタ型)

nil ならば C の NULL に変換されます DL::CPtr は保持している C ポインタに変換されます。 適当に変換してから、C のポインタに変換します。 文字列であればその先頭ポインタになります。 IO オブジェクトであれば FILE* が渡されます。 整数であればそれがアドレスとみなされます。 どれでもなければ to_ptr を呼び出し DL::CPtr オブジェクトに 変換したのが用いられます。

(unsigned) char/short/int/long/long long

Ruby の整数を C の整数に変換します。

double/float

Ruby の整数 or 浮動小数点数を C の浮動小数点数に変換します

返り値の変換は以下の通りです。

void

nil を返します

(unsigned) char/short/int/long/long long

C の整数を Ruby の整数に変換します

void*(つまり任意のポインタ型)

C のポインタを保持した DL::CPtr を返します。

[PARAM] args:
関数の引数

[SEE_ALSO] Fiddle::Function.new

定数

DEFAULT -> Integer[permalink][rdoc]

デフォルトの呼出規約を表します。

[SEE_ALSO] Fiddle::Function.new

STDCALL -> Integer[permalink][rdoc]

Windows の stdcall 呼出規約を表します。

[SEE_ALSO] Fiddle::Function.new