要約
C の関数を表すクラスです。
目次
特異メソッド
new(ptr, args, ret_type, abi=Fiddle::Function::DEFAULT, name: nil) -> Fiddle::Function
[permalink][rdoc][edit]-
ptr (関数ポインタ)から Fiddle::Function オブジェクトを生成します。
ptr には Fiddle::Handle から Fiddle::Handle#sym などで取りだした関数ポインタ(を表す整数)、もしくは関数を指している Fiddle::Pointer を渡します。
args、ret_type で関数の引数と返り値の型を指定します。これには以下の定数が利用できます。「-TYPE_INT」 のように符号を反転させると unsigned を意味します。
- Fiddle::TYPE_VOID
- Fiddle::TYPE_VOIDP
- Fiddle::TYPE_CHAR
- Fiddle::TYPE_SHORT
- Fiddle::TYPE_INT
- Fiddle::TYPE_LONG
- Fiddle::TYPE_LONG_LONG
- Fiddle::TYPE_FLOAT
- Fiddle::TYPE_DOUBLE
- Fiddle::TYPE_INTPTR_T
- Fiddle::TYPE_UINTPTR_T
- Fiddle::TYPE_PTRDIFF_T
- Fiddle::TYPE_SIZE_T
- Fiddle::TYPE_SSIZE_T
abi で呼出規約を指定します。
のどちらかを指定します。
require 'fiddle' h = Fiddle::Handle.new('libc.so.6') func = Fiddle::Function.new(h.sym("strlen"), [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT, name: "strlen") p func.ptr == h.sym("strlen") # => true p func.call("abc") # => 3 p func.name # => "strlen"
- [PARAM] ptr:
- C の関数を指す Fiddle::Pointer オブジェクトもしくはアドレスを表す整数
- [PARAM] args:
- 引数の型を表す配列
- [PARAM] ret_type:
- 返り値の型
- [PARAM] abi:
- 呼出規約
- [PARAM] name:
- 関数の名前(文字列)
インスタンスメソッド
abi -> Integer
[permalink][rdoc][edit]-
呼出規約を返します。
[SEE_ALSO] Fiddle::Function.new
call(*args) -> Integer|DL::CPtr|nil
[permalink][rdoc][edit]-
関数を呼び出します。
Fiddle::Function.new で指定した引数と返り値の型に基いて Ruby のオブジェクトを適切に C のデータに変換して C の関数を呼び出し、その返り値を Ruby のオブジェクトに変換して返します。
引数の変換は以下の通りです。
- void* (つまり任意のポインタ型)
-
nil ならば C の NULL に変換されます Fiddle::Pointer は保持している C ポインタに変換されます。文字列であればその先頭ポインタになります。 IO オブジェクトであれば FILE* が渡されます。整数であればそれがアドレスとみなされます。 to_ptr を持っているならば、それを呼びだし Fiddle::Pointer に変換したものを用います。 to_i を持っているならば、それを呼びだし結果の整数をアドレスと見なします
- (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 のポインタを保持した Fiddle::Pointer を返します。
- [PARAM] args:
- 関数の引数
[SEE_ALSO] Fiddle::Function.new
name -> nil | String
[permalink][rdoc][edit]-
関数の名前を返します。
名前が定義されていない場合は nil を返します。
[SEE_ALSO] Fiddle::Function.new
ptr -> Integer | Fiddle::Function
[permalink][rdoc][edit]-
関数ポインタを返します。
Fiddle::Function.new の第1引数として指定したものを返します。
to_i -> Integer
[permalink][rdoc][edit]-
関数ポインタのアドレスを整数で返します。
[SEE_ALSO] Fiddle::Function#ptr
定数
DEFAULT -> Integer
[permalink][rdoc][edit]-
デフォルトの呼出規約を表します。
[SEE_ALSO] Fiddle::Function.new
STDCALL -> Integer
[permalink][rdoc][edit]-
Windows の stdcall 呼出規約を表します。
stdcall 呼出規約を持つ環境でのみ定義されます。
[SEE_ALSO] Fiddle::Function.new